home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / fb386 / lib / vil310 / demo / vdemo310.bas next >
BASIC Source File  |  1995-02-20  |  112KB  |  2,540 lines

  1. 100 '---------------  VILローダファイル Ver3.10 ---------------
  2. 110 '--------------------  VIL組み込み開始 --------------------
  3. 120 CLEAR ,,512,FRE(4)-1024*128,0,0               'メモリ領域設定
  4. 130 SCREEN 0:CLS
  5. 140 VIL_W0%=0:VIL_W1%=0:VIL_W2%=0:VIL_W3%=0:VIL_W4%=0  '汎用ワーク変数
  6. 150 VIL_W5%=0:VIL_W6%=0:VIL_W7%=0:VIL_W8%=0:VIL_W9%=0
  7. 160 VIL_W0&=0:VIL_W1&=0:VIL_W2&=0:VIL_W3&=0:VIL_W4&=0  '汎用ワーク変数
  8. 170 VIL_W5&=0:VIL_W6&=0:VIL_W7&=0:VIL_W8&=0:VIL_W9&=0
  9. 180 VIL_W0$="":VIL_W1$="":VIL_W2$="":VIL_W3$=""
  10. 190 'ループ変数                長さ
  11. 200 VIL_I%=0:VIL_J%=0:VIL_K%=0:VIL_L%=0
  12. 210 '文字列汎用,ファイル名汎用,描画色  ,背景色(0..15)
  13. 220 VIL_A$="":VIL_F$="":VIL_C%=15:VIL_CB%=0:VIL_CC%=7
  14. 230 '左上隅・右下隅座標
  15. 240 VIL_X%=0:VIL_Y%=0:VIL_W%=0:VIL_Z%=0
  16. 250 'X・Y軸方向長さ  ,個数
  17. 260 VIL_XL%=0:VIL_YL%=0:VIL_XN%=0:VIL_YN%=0
  18. 270 'パレット番号,入力番号,入力キー,アスキーコード,パッドコード
  19. 280 VIL_P%=0:VIL_KN%=0:VIL_K$="":VIL_KY%=0:VIL_PAD%=0
  20. 290 'マウス位置
  21. 300 VIL_MX%=0:VIL_MY%=0:VIL_MW%=0:VIL_MZ%=0
  22. 310 '
  23. 320 VIL_E%=0                                      'エラー番号
  24. 330 VIL_DIR$=""                                   'VILディレクトリ
  25. 340 VIL_APPCNF$="APPLI.CNF"                       'アプリ設定ファイル名
  26. 350 DIM VIL_ENVNAM$(31),VIL_ENVVAL$(31)           '環境変数 名前/値
  27. 360 VIL_ENVNUM%=0                                 '環境変数の数
  28. 370 VIL_VER%=310                                  'VIL VER3.10
  29. 380 '
  30. 390 *VIL_CNF                              '設定ファイル"VIL.CNF"読込
  31. 400 PRINT"Searching "+CHR$(34)+"VIL.CNF"+CHR$(34)
  32. 410 PRINT"Searching current directory"
  33. 420 GOSUB *VIL_ERR_ON:VIL_E%=0
  34. 430 OPEN "I",#1,"VIL.CNF"                 'カレントディレクトリを探す
  35. 440 IF VIL_E%=63 THEN
  36. 450   PRINT"Searching root directory"
  37. 460   VIL_E%=0
  38. 470   OPEN "I",#1,"\VIL.CNF"              'ルートディレクトリを探す
  39. 480   IF VIL_E%=63 THEN                   '見つからなければ設定中止
  40. 490     PRINT"WARNING:"+CHR$(34)+"VIL.CNF"+CHR$(34)+" not found"
  41. 500     GOTO *VIL_L_BGN
  42. 510   ENDIF
  43. 520 ENDIF
  44. 530 PRINT"Reading "+CHR$(34)+"VIL.CNF"+CHR$(34)
  45. 540 '
  46. 550 '    環境変数設定
  47. 560 WHILE EOF(1)=0
  48. 570   GOSUB *VIL_LNR
  49. 580   VIL_W0%=INSTR(VIL_W0$," "):VIL_W1%=VIL_W0%          'スペース開始
  50. 590   WHILE MID$(VIL_W0$,VIL_W1%,1)=" ":VIL_W1%=VIL_W1%+1:WEND
  51. 600   VIL_ENVNAM$(VIL_ENVNUM%)=LEFT$(VIL_W0$,VIL_W0%-1)
  52. 610   VIL_ENVVAL$(VIL_ENVNUM%)= MID$(VIL_W0$,VIL_W1%)
  53. 620   VIL_ENVNUM%=VIL_ENVNUM%+1
  54. 630 '  GOSUB *VIL_LNR
  55. 640 WEND
  56. 650 'FOR VIL_I%=0 TO VIL_ENVNUM%-1:                                                 PRINT VIL_I%;"|";VIL_ENVNAM$(VIL_I%);"|";VIL_ENVVAL$(VIL_I%);"|":          NEXT':VIL_W0$=INPUT$(1)                        '*** デバッグ用
  57. 660 VIL_W0%=SEARCH(VIL_ENVNAM$,"VILDIR"):                                        IF VIL_W0%>-1 THEN VIL_DIR$=VIL_ENVVAL$(VIL_W0%) 'VILディレクトリ設定
  58. 670 VIL_W0%=SEARCH(VIL_ENVNAM$,"APPLICNF"):                                      IF VIL_W0%>-1 THEN VIL_APPCNF$=VIL_ENVVAL$(VIL_W0%)
  59. 680 CLOSE #1
  60. 690 '
  61. 700 *VIL_L_BGN                                ' VIL リンク開始
  62. 710 ON ERROR GOTO 0
  63. 740 *VIL_L_END                                ' VIL リンク終了
  64. 750 '
  65. 760 GOSUB *VIL_ERR_ON:GOSUB *VIL_DEFFN:GOTO *MAIN
  66. 770 '
  67. 780 *VIL_DEFFN
  68. 790 '  S$:文字列に変換 SS$:左にスペースを詰める S0$:左に0を詰める
  69. 800 '  P :正の整数     I  :整数                 R  :実数
  70. 810 DEF FNVIL_P2S$(X&)       =MID$(STR$(X&),2)
  71. 820 DEF FNVIL_P2SS$(X&,Y%)   =RIGHT$("          "+STR$(X&),Y%)
  72. 830 DEF FNVIL_P2S0$(X&,Y%)   =RIGHT$("0000000000"+MID$(STR$(X&),2),Y%)
  73. 840 DEF FNVIL_I2S$(X&)       =MID$(STR$(X&),1-(X&>=0))
  74. 850 DEF FNVIL_I2SS$(X&,Y%)   =RIGHT$("          "+STR$(X&),Y%)
  75. 860 '符号1桁(+-) + 00… + 数値
  76. 870 DEF FNVIL_I2S0$(X&,Y%)   =MID$("+-",1-(X&<0),1)                                                       +RIGHT$("0000000000"+MID$(STR$(ABS(X&)),2)                                          ,Y%-1)
  77. 880 DEF FNVIL_R2S$(X#)       =MID$(STR$(X#),1-(X#>=0))
  78. 890 DEF FNVIL_R2SS$(X#,Y%,Z%)=RIGHT$("          "+STR$(FIX(X#)),Y%)+"."                                   +MID$("0000000000"+STR$(X#)+"0000000000"                                          ,INSTR("0000000000"+STR$(X#),".")+1,Z%)
  79. 900 DEF FNVIL_R2S0$(X#,Y%,Z%)=MID$("+-",1-(X#<0),1)+RIGHT$("0000000000"              +MID$(STR$(FIX(ABS(X#))),2),Y%-1)+MID$("0000000000"+STR$(X#)                 +"0000000000",INSTR("0000000000"+STR$(X#),".")+1,Z%)
  80. 910 RETURN
  81. 920 '
  82. 930 'VIL汎用モジュール
  83. 940 '
  84. 950 *VIL_ERR_ON:ON ERROR GOTO *VIL_ERR:RETURN
  85. 960 '
  86. 970 *VIL_ERR:VIL_E%=ERR:RESUME NEXT
  87. 980 '*VIL_ERR:SCREEN 0:VIL_E%=ERR:PRINT "ERR";VIL_E%;"IN";ERL:BEEP:A$=INPUT$(1):IF A$=" " THEN ON ERROR GOTO 0 ELSE RESUME NEXT   'デバッグ用
  88. 990 '
  89. 1000 *VIL_CNFOP
  90. 1010 'VIL_APPCNF$ をオープン。正常終了時 VIL_E%=0
  91. 1020 VIL_E%=0
  92. 1030 OPEN "I",#1,VIL_APPCNF$
  93. 1040 RETURN
  94. 1050 '
  95. 1060 *VIL_CNFCL
  96. 1070 'VIL_APPCNF$ をクローズ。正常終了時 VIL_E%=0
  97. 1080 VIL_E%=0
  98. 1090 CLOSE #1
  99. 1100 RETURN
  100. 1110 '
  101. 1120 *VIL_CNFERR
  102. 1130 'VIL設定ファイル読み込み時のエラー処理(現バージョンでは強制終了)
  103. 1140 PRINT"CNFファイルに誤りがあります"
  104. 1150 PRINT"エラー行:";VIL_W0$
  105. 1160 STOP
  106. 1170 RETURN
  107. 1180 '
  108. 1190 *VIL_LNR
  109. 1200 '1行読み込み(空行・コメント行スキップ)
  110. 1210 LINE INPUT #1,VIL_W0$':SCREEN 0:PRINT VIL_W0$;"!"
  111. 1220 IF (VIL_W0$="" OR LEFT$(VIL_W0$,1)="'") AND EOF(1)=0 THEN *VIL_LNR
  112. 1230 RETURN
  113. 1240 '
  114. 1250 '--------------------  VIL組み込み終了 --------------------
  115. 10000 *VIL_BAS_VER
  116. 10005 VIL_VER%=310
  117. 10010 RETURN
  118. 10015 *VIL_ENV_INITM
  119. 10020 IF VIL_E%=0 THEN
  120. 10025 VIL_ENV_ENV$="APPLI.ENV"
  121. 10030 VIL_ENV_ORG$="APPLI.ORG"
  122. 10035 VIL_W0%=SEARCH(VIL_ENVNAM$,"APPLIENV"):IF VIL_W0%>-1 THEN VIL_ENV_ENV$=VIL_ENVVAL$(VIL_W0%)
  123. 10040 VIL_W0%=SEARCH(VIL_ENVNAM$,"APPLIORG"):IF VIL_W0%>-1 THEN VIL_ENV_ORG$=VIL_ENVVAL$(VIL_W0%)
  124. 10045 ENDIF
  125. 10050 RETURN
  126. 10055 *VIL_ENV_ROP
  127. 10060 VIL_E%=0:OPEN"I",#1,VIL_ENV_ENV$
  128. 10065 IF VIL_E%THEN VIL_E%=0:OPEN"I",#1,VIL_ENV_ORG$
  129. 10070 RETURN
  130. 10075 *VIL_ENV_RCL
  131. 10080 CLOSE#1:RETURN
  132. 10085 *VIL_ENV_WOP
  133. 10090 VIL_E%=0:OPEN"O",#1,VIL_ENV_ENV$
  134. 10095 IF VIL_E%=64 THEN KILL VIL_ENV_ENV$:VIL_E%=0:OPEN"O",#1,VIL_ENV_ENV$
  135. 10100 RETURN
  136. 10105 *VIL_ENV_WCL
  137. 10110 CLOSE#1:RETURN
  138. 10115 *VIL_ENV_ERR
  139. 10120 CLS
  140. 10125 PRINT"環境ファイルにエラーがあります"
  141. 10130 PRINT"エラー行:";VIL_W0$
  142. 10135 STOP
  143. 10140 RETURN
  144. 10145 *VIL_BEEP_INITM
  145. 10150 IF VIL_E%=0 THEN
  146. 10155 VIL_BEEP_F%=-1
  147. 10160 ENDIF
  148. 10165 RETURN
  149. 10170 *VIL_BEEP_ENVR
  150. 10175 VIL_W0$="":WHILE VIL_W0$<>"#BEEP":GOSUB*VIL_LNR:WEND
  151. 10180 GOSUB*VIL_LNR:VIL_BEEP_F%=VAL(VIL_W0$)
  152. 10185 RETURN
  153. 10190 *VIL_BEEP_ENVW
  154. 10195 PRINT#1,"#BEEP"
  155. 10200 PRINT#1,VIL_BEEP_F%
  156. 10205 RETURN
  157. 10210 *VIL_BEEP_G
  158. 10215 IF VIL_BEEP_F%THEN FOR VIL_I%=1 TO 4:BEEP 363523,5,400:WAIT 5:NEXT
  159. 10220 RETURN
  160. 10225 *VIL_BEEP_B
  161. 10230 IF VIL_BEEP_F%THEN BEEP 363523,40,80:WAIT 40
  162. 10235 RETURN
  163. 10240 *VIL_WIN_INITM
  164. 10245 IF VIL_E%=0 THEN
  165. 10250 VIL_WIN_X%=0:VIL_WIN_Y%=0:VIL_WIN_W%=0:VIL_WIN_Z%=0
  166. 10255 VIL_WIN_UB%=0:VIL_WIN_DB%=0:VIL_WIN_LB%=0:VIL_WIN_RB%=0
  167. 10260 VIL_WIN_AN%=0:VIL_WIN_PM%=0
  168. 10265 VIL_WIN_BFMAX&=VIL_W0&:VIL_WIN_ANMAX%=VIL_W1%
  169. 10270 DIM VIL_WIN_BF%(VIL_W0&),VIL_WIN_BFO&(VIL_W1%)
  170. 10275 DIM VIL_WIN_X%(VIL_W1%),VIL_WIN_Y%(VIL_W1%),VIL_WIN_W%(VIL_W1%),VIL_WIN_Z%(VIL_W1%)
  171. 10280 VIL_WIN_X%(0)=0:VIL_WIN_Y%(0)=0:VIL_WIN_W%(0)=639:VIL_WIN_Z%(0)=479
  172. 10285 ENDIF
  173. 10290 RETURN
  174. 10295 *VIL_WIN_ENVR
  175. 10300 VIL_W0$="":WHILE VIL_W0$<>"#WIN":GOSUB*VIL_LNR:WEND
  176. 10305 RETURN
  177. 10310 *VIL_WIN_ENVW
  178. 10315 PRINT#1,"#WIN"
  179. 10320 RETURN
  180. 10325 *VIL_WIN_OP
  181. 10330 VIL_WIN_AN%=VIL_WIN_AN%+1
  182. 10335 VIL_WIN_X%(VIL_WIN_AN%)=VIL_WIN_X%:VIL_WIN_Y%(VIL_WIN_AN%)=VIL_WIN_Y%
  183. 10340 VIL_WIN_W%(VIL_WIN_AN%)=VIL_WIN_W%:VIL_WIN_Z%(VIL_WIN_AN%)=VIL_WIN_Z%
  184. 10345 VIL_WIN_BFO&(VIL_WIN_AN%)=VIL_WIN_BFO&(VIL_WIN_AN%-1)+INT((INT((VIL_WIN_W%-VIL_WIN_X%+VIL_WIN_LB%+VIL_WIN_RB%+8)/8)*(VIL_WIN_Z%-VIL_WIN_Y%+VIL_WIN_UB%+VIL_WIN_DB%+1)*4+1)/2)
  185. 10350 VIL_E%=0
  186. 10355 GET@A(VIL_WIN_X%-VIL_WIN_LB%,VIL_WIN_Y%-VIL_WIN_UB%)-(VIL_WIN_W%+VIL_WIN_RB%,VIL_WIN_Z%+VIL_WIN_DB%),VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%-1)
  187. 10360 IF VIL_E%THEN
  188. 10365 VIL_WIN_AN%=VIL_WIN_AN%-1
  189. 10370 VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
  190. 10375 VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
  191. 10380 VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)
  192. 10385 VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
  193. 10390 ENDIF
  194. 10395 RETURN
  195. 10400 *VIL_WIN_CL
  196. 10405 PUT@A(VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%,VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%)-(VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%,VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%),VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%-1)
  197. 10410 VIL_WIN_AN%=VIL_WIN_AN%-1
  198. 10415 VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%):VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
  199. 10420 VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%):VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
  200. 10425 RETURN
  201. 10430 *VIL_WIN_CLDMY
  202. 10435 VIL_WIN_AN%=VIL_WIN_AN%-1
  203. 10440 VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%):VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
  204. 10445 VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%):VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
  205. 10450 RETURN
  206. 10455 *VIL_WIN_CLALL
  207. 10460 WHILE VIL_WIN_AN%
  208. 10465 GOSUB*VIL_WIN_CL
  209. 10470 WEND
  210. 10475 RETURN
  211. 10480 *VIL_WIN_PMR
  212. 10485 VIL_WIN_PM%=-1
  213. 10490 VIEW(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%)
  214. 10495 WINDOW(0,0)-(VIL_WIN_W%-VIL_WIN_X%,VIL_WIN_Z%-VIL_WIN_Y%)
  215. 10500 RETURN
  216. 10505 *VIL_WIN_PMA
  217. 10510 VIL_WIN_PM%=0
  218. 10515 VIEW(0,0)-(639,479):WINDOW(0,0)-(639,479)
  219. 10520 RETURN
  220. 10525 *VIL_VKEY_INITM
  221. 10530 IF VIL_E%=0 THEN
  222. 10535 VIL_VKEY_KY%=0:VIL_VKEY_PRM%=0:VIL_VKEY_TC$="":VIL_VKEY_TCB$=""
  223. 10540 DIM VIL_VKEY_KB%(255),VIL_VKEY_PAD%(107)
  224. 10545 VIL_W0$="":WHILE VIL_W0$<>"#VKEY":GOSUB*VIL_LNR:WEND
  225. 10550 FOR VIL_I%=0 TO 240 STEP 16
  226. 10555 GOSUB*VIL_LNR
  227. 10560 FOR VIL_J%=0 TO 15
  228. 10565 VIL_VKEY_KB%(VIL_I%+VIL_J%)=VAL(VIL_W0$)
  229. 10570 VIL_W0%=INSTR(VIL_W0$,",")+1
  230. 10575 IF VIL_W0%>1 THEN VIL_W0$=MID$(VIL_W0$,VIL_W0%)
  231. 10580 NEXT
  232. 10585 NEXT
  233. 10590 FOR VIL_I%=0 TO 99 STEP 9
  234. 10595 GOSUB*VIL_LNR
  235. 10600 FOR VIL_J%=0 TO 8
  236. 10605 VIL_VKEY_PAD%(VIL_I%+VIL_J%)=VAL(VIL_W0$)
  237. 10610 VIL_W0%=INSTR(VIL_W0$,",")+1
  238. 10615 IF VIL_W0%>1 THEN VIL_W0$=MID$(VIL_W0$,VIL_W0%)
  239. 10620 NEXT
  240. 10625 NEXT
  241. 10630 ENDIF
  242. 10635 RETURN
  243. 10640 *VIL_VKEY_ENVR
  244. 10645 VIL_W0$="":WHILE VIL_W0$<>"#VKEY":GOSUB*VIL_LNR:WEND
  245. 10650 RETURN
  246. 10655 *VIL_VKEY_ENVW
  247. 10660 PRINT#1,"#VKEY"
  248. 10665 RETURN
  249. 10670 *VIL_VKEY_KY
  250. 10675 VIL_K$=INKEY$:VIL_VKEY_KY%=-4
  251. 10680 IF VIL_K$<>""THEN
  252. 10685 VIL_KY%=ASC(VIL_K$):VIL_VKEY_KY%=VIL_VKEY_KB%(VIL_KY%)
  253. 10690 ELSE
  254. 10695 VIL_KY%=0:VIL_PAD%=PAD(1)+PTRIG(1)*9
  255. 10700 IF VIL_PAD%THEN
  256. 10705 IF VIL_VKEY_PRM%=0 THEN VIL_VKEY_PRM%=1:VIL_VKEY_KY%=VIL_VKEY_PAD%(VIL_PAD%)
  257. 10710 ELSE
  258. 10715 VIL_VKEY_PRM%=0:VIL_VKEY_KY%=-4
  259. 10720 ENDIF
  260. 10725 ENDIF
  261. 10730 RETURN
  262. 10735 *VIL_VKEY_SETTC
  263. 10740 VIL_VKEY_TCB$="":VIL_I%=1
  264. 10745 WHILE VIL_I%>0
  265. 10750 VIL_W0%=ASC(MID$(VIL_VKEY_TC$,VIL_I%,1))
  266. 10755 VIL_VKEY_TCB$=VIL_VKEY_TCB$+","+MID$(VIL_VKEY_TC$,VIL_I%,1)+STR$(VIL_VKEY_KB%(VIL_W0%))
  267. 10760 VIL_VKEY_KB%(VIL_W0%)=VAL(MID$(VIL_VKEY_TC$,VIL_I%+1))
  268. 10765 VIL_I%=INSTR(VIL_I%+1,VIL_VKEY_TC$,","):VIL_I%=VIL_I%-(VIL_I%>0)
  269. 10770 WEND
  270. 10775 RETURN
  271. 10780 *VIL_VKEY_RESETTC
  272. 10785 VIL_I%=2
  273. 10790 WHILE VIL_I%>0
  274. 10795 VIL_W0%=ASC(MID$(VIL_VKEY_SCB$,VIL_I%,1))
  275. 10800 VIL_VKEY_KB%(VIL_W0%)=VAL(MID$(VIL_VKEY_SCB$,VIL_I%+1))
  276. 10805 VIL_I%=INSTR(VIL_I%+1,VIL_VKEY_SCB$,","):VIL_I%=VIL_I%-(VIL_I%>0)
  277. 10810 WEND
  278. 10815 RETURN
  279. 10820 *VIL_MSEL_INITM
  280. 10825 IF VIL_E%=0 THEN
  281. 10830 VIL_MSEL_MN%=0:VIL_MSEL_BB%=1:VIL_MSEL_BE%=9:VIL_MSEL_BN%=0
  282. 10835 VIL_MSEL_BC%=0:VIL_MSEL_BD%=0:VIL_MSEL_BAM%=0
  283. 10840 VIL_MSEL_WT%=50:VIL_MSEL_MRM%=0:VIL_MSEL_MKM%=0
  284. 10845 VIL_MSEL_CMN%=0:VIL_MSEL_CMR%=0:VIL_MSEL_CR%=0:VIL_MSEL_CRB%=0
  285. 10850 VIL_MSEL_R%=0
  286. 10855 DIM VIL_MSEL_X%(VIL_W1%),VIL_MSEL_Y%(VIL_W1%),VIL_MSEL_W%(VIL_W1%),VIL_MSEL_Z%(VIL_W1%)
  287. 10860 DIM VIL_MSEL_BN%(VIL_W0%)
  288. 10865 DIM VIL_MSEL_CX%(VIL_W2%),VIL_MSEL_CY%(VIL_W2%),VIL_MSEL_CW%(VIL_W2%),VIL_MSEL_CZ%(VIL_W2%)
  289. 10870 DIM VIL_MSEL_CN%(VIL_W2%),VIL_MSEL_CL%(VIL_W2%),VIL_MSEL_CBB%(VIL_W2%),VIL_MSEL_CBE%(VIL_W2%),VIL_MSEL_CBN%(VIL_W2%)
  290. 10875 VIL_W0$="":WHILE VIL_W0$<>"#MSEL":GOSUB*VIL_LNR:WEND
  291. 10880 GOSUB*VIL_LNR:VIL_MSEL_BCM%=VAL(VIL_W0$)
  292. 10885 MOUSE 0:MOUSE 1,320,240,0
  293. 10890 ENDIF
  294. 10895 RETURN
  295. 10900 *VIL_MSEL_ENVR
  296. 10905 VIL_W0$="":WHILE VIL_W0$<>"#MSEL":GOSUB*VIL_LNR:WEND
  297. 10910 GOSUB*VIL_LNR:VIL_MSEL_WT%=VAL(VIL_W0$)
  298. 10915 RETURN
  299. 10920 *VIL_MSEL_ENVW
  300. 10925 PRINT#1,"#MSEL"
  301. 10930 PRINT#1,VIL_MSEL_WT%
  302. 10935 RETURN
  303. 10940 *VIL_MSEL_M
  304. 10945 GOSUB*VIL_MSEL_BCMK
  305. 10950 GOSUB*VIL_MSEL_IN
  306. 10955 RETURN
  307. 10960 *VIL_MSEL_BCMK
  308. 10965 IF VIL_MSEL_BD%AND 2 THEN VIL_W1%=-1 ELSE VIL_W1%=1
  309. 10970 IF VIL_MSEL_BD%AND 4 THEN VIL_W2%=-1 ELSE VIL_W2%=1
  310. 10975 FOR VIL_I%=1 TO VIL_YN%
  311. 10980 FOR VIL_J%=1 TO VIL_XN%
  312. 10985 IF VIL_MSEL_BD%AND 1 THEN
  313. 10990 VIL_W0%=(VIL_J%-1)*VIL_YN%+VIL_I%-1+VIL_MSEL_BB%
  314. 10995 ELSE
  315. 11000 VIL_W0%=(VIL_I%-1)*VIL_XN%+VIL_J%-1+VIL_MSEL_BB%
  316. 11005 ENDIF
  317. 11010 VIL_MSEL_X%(VIL_W0%)=VIL_X%+(VIL_J%-1)*VIL_XL%*VIL_W1%
  318. 11015 VIL_MSEL_Y%(VIL_W0%)=VIL_Y%+(VIL_I%-1)*VIL_YL%*VIL_W2%
  319. 11020 VIL_MSEL_W%(VIL_W0%)=VIL_W%+(VIL_J%-1)*VIL_XL%*VIL_W1%
  320. 11025 VIL_MSEL_Z%(VIL_W0%)=VIL_Z%+(VIL_I%-1)*VIL_YL%*VIL_W2%
  321. 11030 NEXT
  322. 11035 NEXT
  323. 11040 RETURN
  324. 11045 *VIL_MSEL_IN
  325. 11050 VIL_W0%=-5:VIL_W1%=-6:VIL_W2%=-7:VIL_W3%=-8
  326. 11055 IF VIL_MSEL_BD%AND 2 THEN SWAP VIL_W0%,VIL_W1%
  327. 11060 IF VIL_MSEL_BD%AND 4 THEN SWAP VIL_W2%,VIL_W3%
  328. 11065 IF VIL_MSEL_BD%AND 1 THEN SWAP VIL_W0%,VIL_W3%:SWAP VIL_W1%,VIL_W2%:SWAP VIL_XN%,VIL_YN%
  329. 11070 MOUSE 1,,,1
  330. 11075 IF VIL_MSEL_MN%THEN VIL_MSEL_BN%=VIL_MSEL_BN%(VIL_MSEL_MN%)
  331. 11080 IF VIL_MSEL_BN%<VIL_MSEL_BB%OR VIL_MSEL_BE%<VIL_MSEL_BN%THEN VIL_MSEL_BN%=VIL_MSEL_BB%
  332. 11085 IF VIL_MSEL_BC%=0 THEN GOSUB*VIL_MSEL_BC
  333. 11090 *VIL_MSEL_IN_W0
  334. 11095 GOSUB*VIL_VKEY_KY
  335. 11100 IF MOUSE(6,0)THEN VIL_MSEL_MRM%=0
  336. 11105 IF MOUSE(2,0)THEN
  337. 11110 IF VIL_MSEL_MRM%=1 THEN WAIT VIL_MSEL_WT%
  338. 11115 IF VIL_MSEL_MRM%<2 THEN VIL_MSEL_MRM%=VIL_MSEL_MRM%+1
  339. 11120 ENDIF
  340. 11125 IF MOUSE(3,1)OR VIL_VKEY_KY%=-1 THEN
  341. 11130 VIL_W4%=MOUSE(3,0)
  342. 11135 VIL_KN%=-1
  343. 11140 ELSE IF MOUSE(3,0)OR MOUSE(2,0)THEN
  344. 11145 VIL_MX%=MOUSE(0):VIL_MY%=MOUSE(1)
  345. 11150 IF VIL_WIN_PM%THEN
  346. 11155 VIL_KN%=-2
  347. 11160 IF VIL_WIN_X%<=VIL_MX%AND VIL_MX%<=VIL_WIN_W%AND VIL_WIN_Y%<=VIL_MY%AND VIL_MY%<=VIL_WIN_Z%THEN
  348. 11165 VIL_MW%=VIL_MX%-VIL_WIN_X%:VIL_MZ%=VIL_MY%-VIL_WIN_Y%
  349. 11170 GOSUB*VIL_MSEL_BC:GOSUB*VIL_MSEL_BCCHK:GOSUB*VIL_MSEL_BC
  350. 11175 ENDIF
  351. 11180 ELSE
  352. 11185 VIL_MW%=VIL_MX%:VIL_MZ%=VIL_MY%
  353. 11190 GOSUB*VIL_MSEL_BC:GOSUB*VIL_MSEL_BCCHK:GOSUB*VIL_MSEL_BC
  354. 11195 VIL_MW%=-1
  355. 11200 ENDIF
  356. 11205 ELSE
  357. 11210 IF VIL_VKEY_KY%=-4 THEN
  358. 11215 GOTO*VIL_MSEL_IN_W0
  359. 11220 ELSE IF VIL_MSEL_BB%<=VIL_VKEY_KY%AND VIL_VKEY_KY%<=VIL_MSEL_BE%THEN
  360. 11225 VIL_KN%=VIL_VKEY_KY%
  361. 11230 GOSUB*VIL_MSEL_BC:VIL_MSEL_BN%=VIL_KN%:GOSUB*VIL_MSEL_BC
  362. 11235 ELSE IF VIL_VKEY_KY%=-2 THEN
  363. 11240 VIL_KN%=VIL_MSEL_BN%
  364. 11245 ELSE IF VIL_VKEY_KY%=-3 OR VIL_VKEY_KY%=-13 THEN
  365. 11250 VIL_KN%=VIL_VKEY_KY%
  366. 11255 ELSE
  367. 11260 IF VIL_MSEL_MKM%=1 THEN
  368. 11265 IF VIL_VKEY_KY%=-7 OR VIL_VKEY_KY%=-8 THEN VIL_KN%=VIL_VKEY_KY%:GOTO*VIL_MSEL_IN_W1
  369. 11270 ELSE IF VIL_MSEL_MKM%=2 THEN
  370. 11275 IF VIL_VKEY_KY%=-5 OR VIL_VKEY_KY%=-6 THEN VIL_KN%=VIL_VKEY_KY%:GOTO*VIL_MSEL_IN_W1
  371. 11280 ENDIF
  372. 11285 GOSUB*VIL_MSEL_BC
  373. 11290 VIL_MSEL_BN%=VIL_MSEL_BN%-(VIL_VKEY_KY%=VIL_W0%)+(VIL_VKEY_KY%=VIL_W1%)+((VIL_VKEY_KY%=VIL_W2%)-(VIL_VKEY_KY%=VIL_W3%))*VIL_XN%
  374. 11295 VIL_MSEL_BN%=VIL_MSEL_BN%+(VIL_VKEY_KY%=VIL_W0%AND(VIL_MSEL_BN%MOD VIL_XN%)=1)*VIL_XN%
  375. 11300 VIL_MSEL_BN%=VIL_MSEL_BN%-(VIL_VKEY_KY%=VIL_W1%AND((VIL_MSEL_BN%+1)MOD VIL_XN%)=1)*VIL_XN%
  376. 11305 VIL_MSEL_BN%=VIL_MSEL_BN%-((VIL_MSEL_BN%<VIL_MSEL_BB%)-(VIL_MSEL_BN%>VIL_MSEL_BE%))*(VIL_MSEL_BE%-VIL_MSEL_BB%+1)
  377. 11310 GOSUB*VIL_MSEL_BC
  378. 11315 GOTO*VIL_MSEL_IN_W0
  379. 11320 ENDIF
  380. 11325 ENDIF
  381. 11330 *VIL_MSEL_IN_W1
  382. 11335 VIL_MSEL_BN%(VIL_MSEL_MN%)=VIL_MSEL_BN%:MOUSE 1,,,0:VIL_MSEL_BC%=-1
  383. 11340 RETURN
  384. 11345 *VIL_MSEL_BCCHK
  385. 11350 VIL_KN%=-2
  386. 11355 IF MSEL_BAM%=0 THEN
  387. 11360 IF(VIL_MSEL_BD%AND 1)=1 THEN
  388. 11365 FOR VIL_I%=VIL_MSEL_BB%TO VIL_MSEL_BE%STEP VIL_YN%
  389. 11370 IF VIL_MSEL_X%(VIL_I%)=<VIL_MW%AND VIL_MW%=<VIL_MSEL_W%(VIL_I%)THEN
  390. 11375 FOR VIL_J%=VIL_I%TO VIL_I%+VIL_YN%-1
  391. 11380 IF VIL_MSEL_Y%(VIL_J%)=<VIL_MZ%AND VIL_MZ%=<VIL_MSEL_Z%(VIL_J%)THEN
  392. 11385 VIL_KN%=VIL_J%:VIL_MSEL_BN%=VIL_KN%
  393. 11390 VIL_I%=VIL_MSEL_BE%:VIL_J%=VIL_I%
  394. 11395 ENDIF
  395. 11400 NEXT
  396. 11405 ENDIF
  397. 11410 NEXT
  398. 11415 ELSE
  399. 11420 FOR VIL_I%=VIL_MSEL_BB%TO VIL_MSEL_BB%+VIL_XN%-1
  400. 11425 IF VIL_MSEL_X%(VIL_I%)=<VIL_MW%AND VIL_MW%=<VIL_MSEL_W%(VIL_I%)THEN
  401. 11430 FOR VIL_J%=VIL_I%TO VIL_MSEL_BE%STEP VIL_XN%
  402. 11435 IF VIL_MSEL_Y%(VIL_J%)=<VIL_MZ%AND VIL_MZ%=<VIL_MSEL_Z%(VIL_J%)THEN
  403. 11440 VIL_KN%=VIL_J%:VIL_MSEL_BN%=VIL_KN%
  404. 11445 VIL_I%=VIL_MSEL_BE%:VIL_J%=VIL_I%
  405. 11450 ENDIF
  406. 11455 NEXT
  407. 11460 ENDIF
  408. 11465 NEXT
  409. 11470 ENDIF
  410. 11475 ELSE
  411. 11480 IF(VIL_MSEL_BD%AND 1)=1 THEN
  412. 11485 FOR VIL_I%=VIL_MSEL_BB%TO VIL_MSEL_BB%+VIL_YN%-1
  413. 11490 IF VIL_MSEL_Y%(VIL_I%)=<VIL_MZ%AND VIL_MZ%=<VIL_MSEL_Z%(VIL_I%)THEN
  414. 11495 FOR VIL_J%=VIL_I%TO VIL_MSEL_BE%STEP VIL_YN%
  415. 11500 IF VIL_MSEL_X%(VIL_J%)=<VIL_MW%AND VIL_MW%=<VIL_MSEL_W%(VIL_J%)THEN
  416. 11505 VIL_KN%=VIL_J%:VIL_MSEL_BN%=VIL_KN%
  417. 11510 VIL_I%=VIL_MSEL_BE%:VIL_J%=VIL_I%
  418. 11515 ENDIF
  419. 11520 NEXT
  420. 11525 ENDIF
  421. 11530 NEXT
  422. 11535 ELSE
  423. 11540 FOR VIL_I%=VIL_MSEL_BB%TO VIL_MSEL_BE%STEP VIL_XN%
  424. 11545 IF VIL_MSEL_Y%(VIL_I%)=<VIL_MZ%AND VIL_MZ%=<VIL_MSEL_Z%(VIL_I%)THEN
  425. 11550 FOR VIL_J%=VIL_I%TO VIL_I%+VIL_XN%-1
  426. 11555 IF VIL_MSEL_X%(VIL_J%)=<VIL_MW%AND VIL_MW%=<VIL_MSEL_W%(VIL_J%)THEN
  427. 11560 VIL_KN%=VIL_J%:VIL_MSEL_BN%=VIL_KN%
  428. 11565 VIL_I%=VIL_MSEL_BE%:VIL_J%=VIL_I%
  429. 11570 ENDIF
  430. 11575 NEXT
  431. 11580 ENDIF
  432. 11585 NEXT
  433. 11590 ENDIF
  434. 11595 ENDIF
  435. 11600 RETURN
  436. 11605 *VIL_MSEL_CNFM
  437. 11610 VIL_MSEL_BD%=0:VIL_MSEL_MKM%=1
  438. 11615 IF VIL_MSEL_BC%=0 THEN
  439. 11620 FOR VIL_MSEL_CR%=1 TO VIL_MSEL_CMR%
  440. 11625 GOSUB*VIL_MSEL_CNFM_W0
  441. 11630 GOSUB*VIL_MSEL_BCMK
  442. 11635 VIL_MSEL_BN%=VIL_MSEL_BN%(VIL_MSEL_MN%)
  443. 11640 GOSUB*VIL_MSEL_LC
  444. 11645 NEXT
  445. 11650 ENDIF
  446. 11655 VIL_MSEL_CR%=VIL_MSEL_BN%(VIL_MSEL_CMN%)
  447. 11660 IF VIL_MSEL_CR%<1 OR VIL_MSEL_CMR%<VIL_MSEL_CR%THEN VIL_MSEL_CR%=1
  448. 11665 VIL_KN%=-6
  449. 11670 WHILE-9<VIL_KN%AND VIL_KN%<-4
  450. 11675 GOSUB*VIL_MSEL_CNFM_W0
  451. 11680 GOSUB*VIL_MSEL_BCMK:VIL_MSEL_BN%=VIL_MSEL_BN%(VIL_MSEL_MN%)
  452. 11685 GOSUB*VIL_MSEL_LC
  453. 11690 VIL_MSEL_BC%=0
  454. 11695 GOSUB*VIL_MSEL_IN
  455. 11700 GOSUB*VIL_MSEL_BC:GOSUB*VIL_MSEL_LC
  456. 11705 IF VIL_KN%=-2 THEN
  457. 11710 VIL_MSEL_BN%(VIL_MSEL_MN%)=VIL_MSEL_BN%
  458. 11715 IF VIL_WIN_PM%=0 THEN VIL_MW%=VIL_MX%:VIL_MZ%=VIL_MY%
  459. 11720 VIL_MSEL_CRB%=VIL_MSEL_CR%
  460. 11725 FOR VIL_I%=1 TO VIL_MSEL_CMR%
  461. 11730 IF VIL_MSEL_CY%(VIL_I%)<=VIL_MZ%AND VIL_MZ%<=VIL_MSEL_CZ%(VIL_I%)THEN
  462. 11735 VIL_MSEL_CR%=VIL_I%
  463. 11740 GOSUB*VIL_MSEL_CNFM_W0
  464. 11745 GOSUB*VIL_MSEL_BCMK:GOSUB*VIL_MSEL_BCCHK
  465. 11750 IF VIL_KN%>-1 THEN
  466. 11755 GOSUB*VIL_MSEL_LC
  467. 11760 VIL_MSEL_BN%=VIL_MSEL_BN%(VIL_MSEL_MN%)
  468. 11765 VIL_MSEL_BN%(VIL_MSEL_MN%)=VIL_KN%
  469. 11770 GOSUB*VIL_MSEL_LC
  470. 11775 ELSE
  471. 11780 VIL_MSEL_CR%=VIL_MSEL_CRB%
  472. 11785 VIL_KN%=-2
  473. 11790 ENDIF
  474. 11795 VIL_I%=VIL_MSEL_CMR%
  475. 11800 ENDIF
  476. 11805 NEXT
  477. 11810 IF VIL_WIN_PM%=0 THEN VIL_MW%=-1
  478. 11815 ELSE
  479. 11820 VIL_MSEL_CR%=VIL_MSEL_CR%+(VIL_KN%=-7)-(VIL_KN%=-8)
  480. 11825 VIL_MSEL_CR%=VIL_MSEL_CR%+((VIL_MSEL_CR%>VIL_MSEL_CMR%)-(VIL_MSEL_CR%<1))*VIL_MSEL_CMR%
  481. 11830 ENDIF
  482. 11835 WEND
  483. 11840 VIL_MSEL_BN%(VIL_MSEL_CMN%)=VIL_MSEL_CR%
  484. 11845 VIL_MSEL_MKM%=0
  485. 11850 RETURN
  486. 11855 *VIL_MSEL_CNFM_W0
  487. 11860 VIL_X%=VIL_MSEL_CX%(VIL_MSEL_CR%):VIL_Y%=VIL_MSEL_CY%(VIL_MSEL_CR%):VIL_W%=VIL_MSEL_CW%(VIL_MSEL_CR%):VIL_Z%=VIL_MSEL_CZ%(VIL_MSEL_CR%)
  488. 11865 VIL_XL%=VIL_MSEL_CL%(VIL_MSEL_CR%):VIL_XN%=VIL_MSEL_CN%(VIL_MSEL_CR%):VIL_YN%=1
  489. 11870 VIL_MSEL_BB%=VIL_MSEL_CBB%(VIL_MSEL_CR%):VIL_MSEL_BE%=VIL_MSEL_CBE%(VIL_MSEL_CR%)
  490. 11875 VIL_MSEL_MN%=VIL_MSEL_CMN%+VIL_MSEL_CR%
  491. 11880 RETURN
  492. 11885 *VIL_MSEL_CNFSV
  493. 11890 FOR VIL_I%=0 TO VIL_MSEL_CMR%:VIL_MSEL_CBN%(VIL_I%)=VIL_MSEL_BN%(VIL_MSEL_CMN%+VIL_I%):NEXT
  494. 11895 RETURN
  495. 11900 *VIL_MSEL_CNFLD
  496. 11905 FOR VIL_I%=0 TO VIL_MSEL_CMR%:VIL_MSEL_BN%(VIL_MSEL_CMN%+VIL_I%)=VIL_MSEL_CBN%(VIL_I%):NEXT
  497. 11910 RETURN
  498. 11915 *VIL_MSEL_BC
  499. 11920 IF VIL_MSEL_BCM%THEN
  500. 11925 LINE(VIL_MSEL_X%(VIL_MSEL_BN%),VIL_MSEL_Y%(VIL_MSEL_BN%))-(VIL_MSEL_W%(VIL_MSEL_BN%),VIL_MSEL_Z%(VIL_MSEL_BN%)),XOR,%VIL_C%,BF
  501. 11930 ELSE
  502. 11935 LINE(VIL_MSEL_X%(VIL_MSEL_BN%),VIL_MSEL_Y%(VIL_MSEL_BN%))-(VIL_MSEL_W%(VIL_MSEL_BN%),VIL_MSEL_Z%(VIL_MSEL_BN%)),XOR,%VIL_C%,B
  503. 11940 ENDIF
  504. 11945 RETURN
  505. 11950 *VIL_MSEL_LC
  506. 11955 LINE(VIL_MSEL_X%(VIL_MSEL_BN%),VIL_MSEL_Z%(VIL_MSEL_BN%))-(VIL_MSEL_W%(VIL_MSEL_BN%),VIL_MSEL_Z%(VIL_MSEL_BN%)),XOR,%VIL_C%
  507. 11960 RETURN
  508. 11965 *VIL_INP_INITM
  509. 11970 IF VIL_E%=0 THEN
  510. 11975 VIL_INP_L%=0:VIL_INP_CX%=0:VIL_INP_CKX%=0
  511. 11980 VIL_INP_HSP%=0:VIL_INP_HSN%=0:VIL_INP_HSMAX%=VIL_W0%
  512. 11985 VIL_INP_HSO$=""
  513. 11990 VIL_INP_HSB%=0:VIL_INP_HSE%=0
  514. 11995 VIL_INP_CF%=0
  515. 12000 DIM VIL_INP_HSB%(VIL_W0%),VIL_INP_HSE%(VIL_W0%)
  516. 12005 DIM VIL_INP_HSPP%(0),VIL_INP_HSNP%(0),VIL_INP_HS$(0)
  517. 12010 MOUSE 0:MOUSE 1,320,240,0
  518. 12015 ENDIF
  519. 12020 RETURN
  520. 12025 *VIL_INP_ENVR
  521. 12030 VIL_W0$="":WHILE VIL_W0$<>"#INP":GOSUB*VIL_LNR:WEND
  522. 12035 VIL_I%=1:VIL_INP_HSE%(0)=0
  523. 12040 WHILE VIL_I%<=VIL_INP_HSMAX%
  524. 12045 GOSUB*VIL_LNR:
  525. 12050 VIL_INP_HSB%(VIL_I%)=VIL_INP_HSE%(VIL_I%-1)+1
  526. 12055 VIL_INP_HSE%(VIL_I%)=VIL_INP_HSB%(VIL_I%)+VAL(VIL_W0$)-1
  527. 12060 VIL_I%=VIL_I%+1
  528. 12065 WEND
  529. 12070 VIL_W0%=VIL_INP_HSE%(VIL_INP_HSMAX%)
  530. 12075 ERASE VIL_INP_HSPP%,VIL_INP_HSNP%,VIL_INP_HS$
  531. 12080 DIM VIL_INP_HSPP%(VIL_W0%),VIL_INP_HSNP%(VIL_W0%),VIL_INP_HS$(VIL_W0%)
  532. 12085 VIL_I%=1
  533. 12090 WHILE VIL_I%<=VIL_INP_HSMAX%
  534. 12095 FOR VIL_J%=VIL_INP_HSB%(VIL_I%)TO VIL_INP_HSE%(VIL_I%)
  535. 12100 VIL_INP_HSPP%(VIL_J%)=VIL_J%-1:VIL_INP_HSNP%(VIL_J%)=VIL_J%+1:
  536. 12105 GOSUB*VIL_LNR:VIL_INP_HS$(VIL_J%)=MID$(VIL_W0$,2)
  537. 12110 NEXT
  538. 12115 VIL_INP_HSPP%(VIL_INP_HSB%(VIL_I%))=0:VIL_INP_HSNP%(VIL_INP_HSE%(VIL_I%))=0
  539. 12120 VIL_I%=VIL_I%+1
  540. 12125 WEND
  541. 12130 RETURN
  542. 12135 *VIL_INP_ENVW
  543. 12140 PRINT#1,"#INP"
  544. 12145 VIL_I%=1
  545. 12150 WHILE VIL_I%<=VIL_INP_HSMAX%
  546. 12155 VIL_W1%=0:VIL_W0%=VIL_INP_HSB%(VIL_I%)
  547. 12160 WHILE VIL_W0%
  548. 12165 VIL_W1%=VIL_W1%+1:VIL_W0%=VIL_INP_HSNP%(VIL_W0%)
  549. 12170 WEND
  550. 12175 PRINT#1,VIL_W1%
  551. 12180 VIL_I%=VIL_I%+1
  552. 12185 WEND
  553. 12190 VIL_I%=1
  554. 12195 WHILE VIL_I%<=VIL_INP_HSMAX%
  555. 12200 VIL_W0%=VIL_INP_HSB%(VIL_I%)
  556. 12205 WHILE VIL_W0%
  557. 12210 PRINT#1,"\"+VIL_INP_HS$(VIL_W0%)
  558. 12215 VIL_W0%=VIL_INP_HSNP%(VIL_W0%)
  559. 12220 WEND
  560. 12225 VIL_I%=VIL_I%+1
  561. 12230 WEND
  562. 12235 RETURN
  563. 12240 *VIL_INP_STR
  564. 12245 VIL_INP_L%=LEN(VIL_A$)
  565. 12250 VIL_INP_CX%=VIL_INP_L%:VIL_INP_CKX%=KLEN(VIL_A$,0)
  566. 12255 IF VIL_INP_HSN%THEN VIL_INP_HSP%=0:VIL_INP_CF%=0:VIL_INP_HSS$="":VIL_INP_HSB%=VIL_INP_HSB%(VIL_INP_HSN%):VIL_INP_HSE%=VIL_INP_HSE%(VIL_INP_HSN%)
  567. 12260 MOUSE 1,,,1
  568. 12265 VIL_KN%=1:GOSUB*VIL_INP_GPRINT:GOSUB*VIL_INP_STR_W0
  569. 12270 WHILE VIL_KN%>0
  570. 12275 GOSUB*VIL_VKEY_KY
  571. 12280 IF 128<=VIL_KY%AND VIL_KY%<=159 THEN VIL_W0$=VIL_K$:GOSUB*VIL_VKEY_KY:VIL_K$=VIL_W0$+VIL_K$
  572. 12285 IF MOUSE(3,1)OR VIL_VKEY_KY%=-1 THEN
  573. 12290 VIL_KN%=-1
  574. 12295 ELSE IF MOUSE(3,0)OR MOUSE(2,0)THEN
  575. 12300 VIL_MX%=MOUSE(0):VIL_MY%=MOUSE(1)
  576. 12305 IF VIL_WIN_PM%THEN
  577. 12310 IF VIL_WIN_PM%AND VIL_WIN_X%<=VIL_MX%AND VIL_MX%<=VIL_WIN_W%AND VIL_WIN_Y%<=VIL_MY%AND VIL_MY%<=VIL_WIN_Z%THEN
  578. 12315 VIL_MW%=VIL_MX%-VIL_WIN_X%:VIL_MZ%=VIL_MY%-VIL_WIN_Y%
  579. 12320 ELSE
  580. 12325 VIL_MW%=-1
  581. 12330 ENDIF
  582. 12335 ENDIF
  583. 12340 VIL_KN%=-2
  584. 12345 ELSE IF VIL_VKEY_KY%=-4 THEN
  585. 12350 VIL_KN%=1
  586. 12355 ELSE IF VIL_VKEY_KY%=-2 THEN
  587. 12360 IF VIL_INP_HSN%AND VIL_A$<>""THEN
  588. 12365 GOSUB*VIL_INP_HSSA
  589. 12370 IF VIL_INP_HSP%=0 OR VIL_INP_HSP%=VIL_INP_HSB%THEN
  590. 12375 VIL_INP_HSO$=VIL_INP_HS$(VIL_INP_HSB%)
  591. 12380 VIL_INP_HS$(VIL_INP_HSB%)=VIL_A$
  592. 12385 VIL_INP_HSNP%(VIL_INP_HSE%)=VIL_INP_HSB%
  593. 12390 VIL_INP_HSPP%(VIL_INP_HSB%)=VIL_INP_HSE%
  594. 12395 VIL_INP_HSB%=VIL_INP_HSNP%(VIL_INP_HSB%)
  595. 12400 VIL_INP_HSE%=VIL_INP_HSNP%(VIL_INP_HSE%)
  596. 12405 VIL_INP_HSPP%(VIL_INP_HSB%)=0
  597. 12410 VIL_INP_HSNP%(VIL_INP_HSE%)=0
  598. 12415 ELSE IF VIL_INP_HSP%<>VIL_INP_HSE%THEN
  599. 12420 VIL_INP_HSPP%(VIL_INP_HSNP%(VIL_INP_HSP%))=VIL_INP_HSPP%(VIL_INP_HSP%)
  600. 12425 VIL_INP_HSNP%(VIL_INP_HSPP%(VIL_INP_HSP%))=VIL_INP_HSNP%(VIL_INP_HSP%)
  601. 12430 VIL_INP_HSNP%(VIL_INP_HSE%)=VIL_INP_HSP%
  602. 12435 VIL_INP_HSPP%(VIL_INP_HSP%)=VIL_INP_HSE%
  603. 12440 VIL_INP_HSNP%(VIL_INP_HSP%)=0
  604. 12445 VIL_INP_HSE%=VIL_INP_HSP%
  605. 12450 ENDIF
  606. 12455 ENDIF
  607. 12460 VIL_KN%=0
  608. 12465 ELSE IF VIL_VKEY_KY%=-13 THEN
  609. 12470 VIL_KN%=-13
  610. 12475 ELSE
  611. 12480 GOSUB*VIL_INP_STR_W0
  612. 12485 IF VIL_KY%>=32 AND VIL_KY%<>127 THEN
  613. 12490 VIL_W0%=KTYPE(VIL_K$,1)+1
  614. 12495 IF VIL_INP_L%+VIL_W0%<=VIL_L%THEN
  615. 12500 VIL_A$=LEFT$(VIL_A$,VIL_INP_CX%)+VIL_K$+MID$(VIL_A$,VIL_INP_CX%+1)
  616. 12505 VIL_INP_L%=VIL_INP_L%+VIL_W0%
  617. 12510 IF VIL_INP_L%<VIL_L%THEN
  618. 12515 VIL_INP_CKX%=VIL_INP_CKX%+1:VIL_INP_CX%=VIL_INP_CX%+VIL_W0%
  619. 12520 ENDIF
  620. 12525 GOSUB*VIL_INP_GPRINT
  621. 12530 VIL_INP_CF%=-1
  622. 12535 ENDIF
  623. 12540 ELSE IF VIL_VKEY_KY%=-7 OR VIL_VKEY_KY%=-8 THEN
  624. 12545 IF VIL_INP_HSN%THEN
  625. 12550 GOSUB*VIL_INP_HSSP
  626. 12555 VIL_INP_L%=LEN(VIL_A$):VIL_INP_CX%=VIL_INP_L%:VIL_INP_CKX%=KLEN(VIL_A$,0):VIL_INP_CF%=0
  627. 12560 GOSUB*VIL_INP_GPRINT
  628. 12565 ENDIF
  629. 12570 ELSE IF VIL_VKEY_KY%=-5 THEN
  630. 12575 IF VIL_INP_CX%<VIL_INP_L%THEN
  631. 12580 VIL_INP_CKX%=VIL_INP_CKX%+1:VIL_W0%=VIL_INP_CX%
  632. 12585 IF VIL_INP_CKX%<KLEN(VIL_A$)+1 THEN VIL_INP_CX%=VIL_INP_CX%+1+KTYPE(VIL_A$,VIL_INP_CKX%)ELSE VIL_INP_CX%=VIL_INP_CX%+1
  633. 12590 IF VIL_INP_CX%=VIL_L%THEN VIL_INP_CX%=VIL_W0%:VIL_INP_CKX%=VIL_INP_CKX%-1
  634. 12595 ENDIF
  635. 12600 ELSE IF VIL_VKEY_KY%=-6 THEN
  636. 12605 IF VIL_INP_CX%>0 THEN
  637. 12610 VIL_INP_CKX%=VIL_INP_CKX%-1
  638. 12615 VIL_INP_CX%=VIL_INP_CX%-1-KTYPE(VIL_A$,VIL_INP_CKX%+1)
  639. 12620 ENDIF
  640. 12625 ELSE IF VIL_VKEY_KY%=-15 AND VIL_INP_CX%>0 THEN
  641. 12630 VIL_INP_CKX%=VIL_INP_CKX%-1
  642. 12635 VIL_W0%=KTYPE(VIL_A$,VIL_INP_CKX%+1)+1
  643. 12640 VIL_INP_L%=VIL_INP_L%-VIL_W0%:VIL_INP_CX%=VIL_INP_CX%-VIL_W0%
  644. 12645 VIL_A$=KLEFT$(VIL_A$,VIL_INP_CKX%)+KMID$(VIL_A$,VIL_INP_CKX%+2)
  645. 12650 GOSUB*VIL_INP_GPRINT
  646. 12655 VIL_INP_CF%=-1
  647. 12660 ELSE IF VIL_VKEY_KY%=-16 AND VIL_INP_CX%<VIL_INP_L%THEN
  648. 12665 VIL_INP_L%=VIL_INP_L%-KTYPE(VIL_A$,VIL_INP_CKX%+1)-1
  649. 12670 VIL_A$=KLEFT$(VIL_A$,VIL_INP_CKX%)+KMID$(VIL_A$,VIL_INP_CKX%+2)
  650. 12675 GOSUB*VIL_INP_GPRINT
  651. 12680 VIL_INP_CF%=-1
  652. 12685 ELSE IF VIL_VKEY_KY%=-17 THEN
  653. 12690 VIL_A$="":VIL_INP_L%=0:VIL_INP_CX%=0:VIL_INP_CKX%=0
  654. 12695 GOSUB*VIL_INP_GPRINT
  655. 12700 VIL_INP_CF%=-1
  656. 12705 ENDIF
  657. 12710 GOSUB*VIL_INP_STR_W0:VIL_KN%=1
  658. 12715 ENDIF
  659. 12720 WEND
  660. 12725 MOUSE 1,,,0
  661. 12730 IF VIL_INP_HSN%THEN VIL_INP_HSB%(VIL_INP_HSN%)=VIL_INP_HSB%:VIL_INP_HSE%(VIL_INP_HSN%)=VIL_INP_HSE%
  662. 12735 GOSUB*VIL_INP_STR_W0
  663. 12740 RETURN
  664. 12745 *VIL_INP_STR_W0
  665. 12750 VIL_W0%=7
  666. 12755 IF VIL_INP_CX%<VIL_INP_L%THEN IF KTYPE(VIL_A$,VIL_INP_CKX%+1)THEN VIL_W0%=15
  667. 12760 LINE(VIL_X%+VIL_INP_CX%*8,VIL_Y%+17)-(VIL_X%+VIL_INP_CX%*8+VIL_W0%,VIL_Y%+17),XOR,%VIL_C%
  668. 12765 RETURN
  669. 12770 *VIL_INP_HSSA
  670. 12775 VIL_INP_HSP%=VIL_INP_HSE%(VIL_INP_HSN%)
  671. 12780 WHILE VIL_INP_HSP%AND VIL_INP_HS$(VIL_INP_HSP%)<>VIL_A$
  672. 12785 VIL_INP_HSP%=VIL_INP_HSPP%(VIL_INP_HSP%)
  673. 12790 WEND
  674. 12795 RETURN
  675. 12800 *VIL_INP_HSSP
  676. 12805 IF VIL_INP_CF%THEN VIL_INP_HSS$=VIL_A$:VIL_INP_HSP%=0
  677. 12810 IF VIL_INP_HSP%=0 THEN
  678. 12815 IF VIL_VKEY_KY%=-7 THEN VIL_INP_HSP%=VIL_INP_HSE%ELSE VIL_INP_HSP%=VIL_INP_HSB%
  679. 12820 ELSE
  680. 12825 IF VIL_VKEY_KY%=-7 THEN VIL_INP_HSP%=VIL_INP_HSPP%(VIL_INP_HSP%)ELSE VIL_INP_HSP%=VIL_INP_HSNP%(VIL_INP_HSP%)
  681. 12830 ENDIF
  682. 12835 VIL_W0%=LEN(VIL_INP_HSS$)
  683. 12840 WHILE VIL_INP_HSP%AND(LEFT$(VIL_INP_HS$(VIL_INP_HSP%),VIL_W0%)<>VIL_INP_HSS$OR VIL_INP_HS$(VIL_INP_HSP%)="")
  684. 12845 IF VIL_VKEY_KY%=-7 THEN VIL_INP_HSP%=VIL_INP_HSPP%(VIL_INP_HSP%)ELSE VIL_INP_HSP%=VIL_INP_HSNP%(VIL_INP_HSP%)
  685. 12850 WEND
  686. 12855 IF VIL_INP_HSP%THEN VIL_A$=VIL_INP_HS$(VIL_INP_HSP%)ELSE VIL_A$=VIL_INP_HSS$
  687. 12860 RETURN
  688. 12865 *VIL_INP_GPRINT
  689. 12870 LINE(VIL_X%,VIL_Y%)-(VIL_X%+VIL_L%*8-1,VIL_Y%+15),PSET,%VIL_CB%,BF
  690. 12875 SYMBOL(VIL_X%,VIL_Y%),VIL_A$,1,1,%VIL_C%
  691. 12880 RETURN
  692. 12885 *VIL_INP_FEPON
  693. 12890 CONSOLE 0,24,2
  694. 12895 VIL_W0%=VIL_WIN_PM%:GOSUB*VIL_WIN_PMA
  695. 12900 VIL_E%=0
  696. 12905 GET@A(0,464)-(639,479),VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%)
  697. 12910 IF VIL_E%=0 THEN LINE(0,464)-(639,479),PSET,0,BF
  698. 12915 IF VIL_W0%THEN GOSUB*VIL_WIN_PMR
  699. 12920 RETURN
  700. 12925 *VIL_INP_FEPOFF
  701. 12930 CONSOLE 0,25,0
  702. 12935 VIL_W0%=VIL_WIN_PM%:GOSUB*VIL_WIN_PMA
  703. 12940 PUT@A(0,464)-(639,479),VIL_WIN_BF%,PSET,,,,VIL_WIN_BFO&(VIL_WIN_AN%)
  704. 12945 IF VIL_W0%THEN GOSUB*VIL_WIN_PMR
  705. 12950 RETURN
  706. 12955 *VIL_INP_MVWAIT
  707. 12960 VIL_W0%=MOUSE(9)+MOUSE(10):VIL_W0$=INKEY$
  708. 12965 WHILE ABS(MOUSE(9))<10 AND ABS(MOUSE(10))<10 AND MOUSE(3,0)+MOUSE(3,1)=0 AND INKEY$=""AND PAD(1)+PTRIG(1)=0:WEND
  709. 12970 RETURN
  710. 12975 *VIL_MG_INITM
  711. 12980 IF VIL_E%=0 THEN
  712. 12985 VIL_MG_X%=0:VIL_MG_Y%=0:VIL_MG_GN%=0:VIL_MG_PN%=0
  713. 12990 DIM VIL_MG_MGD%(VIL_W0&),VIL_MG_MGI&(VIL_W1%),VIL_MG_MPD%(VIL_W2&),VIL_MG_MPI&(VIL_W3%)
  714. 12995 VIL_W0$="":WHILE VIL_W0$<>"#MG":GOSUB*VIL_LNR:WEND
  715. 13000 ENDIF
  716. 13005 RETURN
  717. 13010 *VIL_MG_ENVR
  718. 13015 VIL_W0$="":WHILE VIL_W0$<>"#MG":GOSUB*VIL_LNR:WEND
  719. 13020 RETURN
  720. 13025 *VIL_MG_ENVW
  721. 13030 PRINT#1,"#MG"
  722. 13035 RETURN
  723. 13040 *VIL_MG_LD
  724. 13045 LOAD@VIL_MG_F$+".MGD",VIL_MG_MGD%
  725. 13050 LOAD@VIL_MG_F$+".MGI",VIL_MG_MGI&
  726. 13055 LOAD@VIL_MG_F$+".MPD",VIL_MG_MPD%
  727. 13060 LOAD@VIL_MG_F$+".MPI",VIL_MG_MPI&
  728. 13065 RETURN
  729. 13070 *VIL_MG_SETP
  730. 13075 FOR VIL_I%=0 TO 15
  731. 13080 PALETTE VIL_I%,[(VIL_MG_MPD%(VIL_MG_MPI&(VIL_MG_PN%)+VIL_I%)AND&HF0),(VIL_MG_MPD%(VIL_MG_MPI&(VIL_MG_PN%)+VIL_I%)AND&HF00)/&H10,(VIL_MG_MPD%(VIL_MG_MPI&(VIL_MG_PN%)+VIL_I%)AND&HF)*&H10]
  732. 13085 NEXT
  733. 13090 RETURN
  734. 13095 *VIL_MG_PUTG
  735. 13100 PUT@A(VIL_MG_X%,VIL_MG_Y%)-(VIL_MG_X%+VIL_MG_MGD%(VIL_MG_MGI&(VIL_MG_GN%)+2),VIL_MG_Y%+VIL_MG_MGD%(VIL_MG_MGI&(VIL_MG_GN%)+3)),VIL_MG_MGD%,,,,,VIL_MG_MGI&(VIL_MG_GN%)+4
  736. 13105 RETURN
  737. 15000 *VIL_VWM_VER
  738. 15005 VIL_VER%=310
  739. 15010 RETURN
  740. 15015 *VIL_VWM_INITM
  741. 15020 IF VIL_E%=0 THEN
  742. 15025 VIL_VWM_AT%=0:VIL_VWM_T$=""
  743. 15030 VIL_VWM_ATB%=0:VIL_VWM_PMB%=0
  744. 15035 VIL_VWM_WX%=0:VIL_VWM_WY%=0
  745. 15040 VIL_VWM_XM%=0:VIL_VWM_YM%=0:VIL_VWM_WM%=639:VIL_VWM_ZM%=479
  746. 15045 VIL_VWM_XL%=60:VIL_VWM_YL%=8:VIL_VWM_WL%=624:VIL_VWM_ZL%=456
  747. 15050 VIL_VWM_XD%=1:VIL_VWM_YD%=1:VIL_VWM_WD%=1:VIL_VWM_ZD%=1
  748. 15055 VIL_VWM_XLBL%=0:VIL_VWM_XLIL%=0:VIL_VWM_XLIP%=0
  749. 15060 VIL_VWM_YLBL%=0:VIL_VWM_YLIL%=0:VIL_VWM_YLIP%=0
  750. 15065 VIL_VWM_N%=0:VIL_VWM_R%=0
  751. 15070 VIL_VWM_NMAX%=VIL_W0%:VIL_VWM_CB%=VIL_W1%
  752. 15075 DIM VIL_VWM_X%(VIL_W0%),VIL_VWM_Y%(VIL_W0%),VIL_VWM_W%(VIL_W0%),VIL_VWM_Z%(VIL_W0%)
  753. 15080 DIM VIL_VWM_AT%(VIL_WIN_ANMAX%),VIL_VWM_T$(VIL_WIN_ANMAX%),VIL_VWM_N%(VIL_WIN_ANMAX%),VIL_VWM_FW%(VIL_WIN_ANMAX%)
  754. 15085 DIM VIL_VWM_CF%(2),VIL_VWM_CB%(2)
  755. 15090 IF VIL_W2%=0 THEN VIL_W2%=5
  756. 15095 DIM VIL_VWM_UB%(VIL_W2%),VIL_VWM_DB%(VIL_W2%),VIL_VWM_RB%(VIL_W2%),VIL_VWM_LB%(VIL_W2%)
  757. 15100 RESTORE*VIL_VWM_INITM_D0
  758. 15105 FOR VIL_I%=1 TO 5:READ VIL_VWM_UB%(VIL_I%),VIL_VWM_DB%(VIL_I%),VIL_VWM_RB%(VIL_I%),VIL_VWM_LB%(VIL_I%):NEXT
  759. 15110 *VIL_VWM_INITM_D0
  760. 15115 DATA 0,0,0,0
  761. 15120 DATA 16,8,8,8
  762. 15125 DATA 16,16,8,8
  763. 15130 DATA 16,8,16,8
  764. 15135 DATA 16,16,16,8
  765. 15140 VIL_W0$="":WHILE VIL_W0$<>"#VWM":GOSUB*VIL_LNR:WEND
  766. 15145 GOSUB*VIL_VWM_MCR:VIL_VWM_MCX0%=VIL_VWM_MCX%:VIL_VWM_MCY0%=VIL_VWM_MCY%:VIL_VWM_MCA0$=VIL_VWM_MCA$:VIL_VWM_MCD0$=VIL_VWM_MCD$
  767. 15150 GOSUB*VIL_VWM_MCR:VIL_VWM_MCX1%=VIL_VWM_MCX%:VIL_VWM_MCY1%=VIL_VWM_MCY%:VIL_VWM_MCA1$=VIL_VWM_MCA$:VIL_VWM_MCD1$=VIL_VWM_MCD$
  768. 15155 GOSUB*VIL_VWM_MCR:VIL_VWM_MCX2%=VIL_VWM_MCX%:VIL_VWM_MCY2%=VIL_VWM_MCY%:VIL_VWM_MCA2$=VIL_VWM_MCA$:VIL_VWM_MCD2$=VIL_VWM_MCD$
  769. 15160 MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
  770. 15165 ENDIF
  771. 15170 RETURN
  772. 15175 *VIL_VWM_ENVR
  773. 15180 VIL_W0$="":WHILE VIL_W0$<>"#VWM":GOSUB*VIL_LNR:WEND
  774. 15185 GOSUB*VIL_LNR
  775. 15190 FOR VIL_I%=0 TO 2
  776. 15195 VIL_VWM_CF%(VIL_I%)=VAL(VIL_W0$):VIL_W0$=MID$(VIL_W0$,INSTR(VIL_W0$,",")+1)
  777. 15200 NEXT
  778. 15205 GOSUB*VIL_LNR
  779. 15210 FOR VIL_I%=0 TO 2
  780. 15215 VIL_VWM_CB%(VIL_I%)=VAL(VIL_W0$):VIL_W0$=MID$(VIL_W0$,INSTR(VIL_W0$,",")+1)
  781. 15220 NEXT
  782. 15225 FOR VIL_I%=1 TO VIL_VWM_NMAX%
  783. 15230 GOSUB*VIL_LNR
  784. 15235 VIL_VWM_X%(VIL_I%)=VAL(VIL_W0$):VIL_W0$=MID$(VIL_W0$,INSTR(VIL_W0$,",")+1)
  785. 15240 VIL_VWM_Y%(VIL_I%)=VAL(VIL_W0$):VIL_W0$=MID$(VIL_W0$,INSTR(VIL_W0$,",")+1)
  786. 15245 VIL_VWM_W%(VIL_I%)=VAL(VIL_W0$):VIL_W0$=MID$(VIL_W0$,INSTR(VIL_W0$,",")+1)
  787. 15250 VIL_VWM_Z%(VIL_I%)=VAL(VIL_W0$)
  788. 15255 NEXT
  789. 15260 GOSUB*VIL_VWM_PALSET
  790. 15265 RETURN
  791. 15270 *VIL_VWM_ENVW
  792. 15275 PRINT#1,"#VWM"
  793. 15280 PRINT#1,USING"###,###,###";VIL_VWM_CF%(0),VIL_VWM_CF%(1),VIL_VWM_CF%(2)
  794. 15285 PRINT#1,USING"###,###,###";VIL_VWM_CB%(0),VIL_VWM_CB%(1),VIL_VWM_CB%(2)
  795. 15290 FOR VIL_I%=1 TO VIL_VWM_NMAX%
  796. 15295 PRINT#1,USING"###,###,###,###";VIL_VWM_X%(0),VIL_VWM_Y%(0),VIL_VWM_W%(0),VIL_VWM_Z%(0)
  797. 15300 NEXT
  798. 15305 RETURN
  799. 15310 *VIL_VWM_MCR
  800. 15315 GOSUB*VIL_LNR:VIL_VWM_MCX%=VAL(VIL_W0$):VIL_VWM_MCY%=VAL(MID$(VIL_W0$,INSTR(VIL_W0$,",")+1))
  801. 15320 GOSUB*VIL_LNR
  802. 15325 VIL_VWM_MCA$="":VIL_VWM_MCD$=""
  803. 15330 FOR VIL_I%=1 TO 63 STEP 2:VIL_VWM_MCA$=VIL_VWM_MCA$+CHR$(VAL("&H"+MID$(VIL_W0$,VIL_I%,2))):NEXT
  804. 15335 GOSUB*VIL_LNR
  805. 15340 FOR VIL_I%=1 TO 63 STEP 2:VIL_VWM_MCD$=VIL_VWM_MCD$+CHR$(VAL("&H"+MID$(VIL_W0$,VIL_I%,2))):NEXT
  806. 15345 RETURN
  807. 15350 *VIL_VWM_PALSET
  808. 15355 VIL_W0%=VIL_VWM_CF%(0):VIL_W1%=VIL_VWM_CF%(1):VIL_W2%=VIL_VWM_CF%(2)
  809. 15360 PALETTE 1,[VIL_W0%-80+(VIL_W0%<80)*(VIL_W0%-80),VIL_W1%-80+(VIL_W1%<80)*(VIL_W1%-80),VIL_W2%-80+(VIL_W2%<80)*(VIL_W2%-80)],1
  810. 15365 PALETTE 2,[VIL_W0%,VIL_W1%,VIL_W2%],1
  811. 15370 PALETTE 3,[VIL_W0%+80+(255<VIL_W0%)*(VIL_W0%-255),VIL_W1%+80+(255<VIL_W1%)*(VIL_W1%-255),VIL_W2%+80+(255<VIL_W2%)*(VIL_W2%-255)],1
  812. 15375 PALETTE VIL_VWM_CB%,[VIL_VWM_CB%(0),VIL_VWM_CB%(1),VIL_VWM_CB%(2)],1
  813. 15380 RETURN
  814. 15385 *VIL_VWM_OP
  815. 15390 GOSUB*VIL_WIN_PMA
  816. 15395 IF VIL_WIN_AN%THEN
  817. 15400 LINE(VIL_WIN_X%(VIL_WIN_AN%)+28,VIL_WIN_Y%(VIL_WIN_AN%)-12)-(VIL_WIN_W%(VIL_WIN_AN%)-28,VIL_WIN_Y%(VIL_WIN_AN%)-4),XOR,%3,BF
  818. 15405 ENDIF
  819. 15410 IF VIL_VWM_N%THEN
  820. 15415 VIL_WIN_X%=VIL_VWM_X%(VIL_VWM_N%):VIL_WIN_Y%=VIL_VWM_Y%(VIL_VWM_N%)
  821. 15420 VIL_WIN_W%=VIL_VWM_W%(VIL_VWM_N%):VIL_WIN_Z%=VIL_VWM_Z%(VIL_VWM_N%)
  822. 15425 ENDIF
  823. 15430 IF VIL_VWM_AT%AND 16384 THEN VIL_VWM_FW%(VIL_WIN_AN%+1)=1 ELSE VIL_VWM_FW%(VIL_WIN_AN%+1)=2-((VIL_VWM_AT%AND 4096)=4096)-((VIL_VWM_AT%AND 8192)=8192)*2
  824. 15435 VIL_WIN_UB%=VIL_VWM_UB%(VIL_VWM_FW%(VIL_WIN_AN%+1)):VIL_WIN_DB%=VIL_VWM_DB%(VIL_VWM_FW%(VIL_WIN_AN%+1))
  825. 15440 VIL_WIN_LB%=VIL_VWM_LB%(VIL_VWM_FW%(VIL_WIN_AN%+1)):VIL_WIN_RB%=VIL_VWM_RB%(VIL_VWM_FW%(VIL_WIN_AN%+1))
  826. 15445 GOSUB*VIL_WIN_OP
  827. 15450 IF VIL_E%THEN
  828. 15455 LINE(VIL_WIN_X%(VIL_WIN_AN%)+28,VIL_WIN_Y%(VIL_WIN_AN%)-12)-(VIL_WIN_W%(VIL_WIN_AN%)-28,VIL_WIN_Y%(VIL_WIN_AN%)-4),XOR,%3,BF
  829. 15460 ELSE
  830. 15465 VIL_VWM_AT%(VIL_WIN_AN%)=VIL_VWM_AT%
  831. 15470 VIL_VWM_T$(VIL_WIN_AN%)=VIL_VWM_T$
  832. 15475 VIL_VWM_N%(VIL_WIN_AN%)=VIL_VWM_N%
  833. 15480 IF VIL_VWM_FW%(VIL_WIN_AN%)=1 THEN
  834. 15485 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),PSET,%VIL_VWM_CB%,BF
  835. 15490 ELSE
  836. 15495 LINE(VIL_WIN_X%-VIL_WIN_LB%,VIL_WIN_Y%-VIL_WIN_UB%)-(VIL_WIN_W%+VIL_WIN_RB%,VIL_WIN_Z%+VIL_WIN_DB%),PSET,%VIL_VWM_CB%,BF
  837. 15500 LINE(VIL_WIN_X%-2,VIL_WIN_Y%-13)-(VIL_WIN_W%+2,VIL_WIN_Y%-3),PSET,%2,BF
  838. 15505 LINE(VIL_WIN_X%-5,VIL_WIN_Y%-13)-(VIL_WIN_X%-3,VIL_WIN_Z%+2),PSET,%2,BF
  839. 15510 LINE(VIL_WIN_W%+3,VIL_WIN_Y%-13)-(VIL_WIN_W%+VIL_WIN_RB%-3,VIL_WIN_Z%+2),PSET,%2,BF
  840. 15515 LINE(VIL_WIN_X%-5,VIL_WIN_Z%+3)-(VIL_WIN_W%+VIL_WIN_RB%-3,VIL_WIN_Z%+VIL_WIN_DB%-3),PSET,%2,BF
  841. 15520 CONNECT(VIL_WIN_W%+VIL_WIN_RB%-1,VIL_WIN_Y%-15)-(VIL_WIN_X%-7,VIL_WIN_Y%-15)-(VIL_WIN_X%-7,VIL_WIN_Z%+VIL_WIN_DB%-1),%3
  842. 15525 CONNECT(VIL_WIN_W%+VIL_WIN_RB%-2,VIL_WIN_Y%-14)-(VIL_WIN_X%-6,VIL_WIN_Y%-14)-(VIL_WIN_X%-6,VIL_WIN_Z%+VIL_WIN_DB%-2),%3
  843. 15530 CONNECT(VIL_WIN_X%-6,VIL_WIN_Z%+VIL_WIN_DB%-1)-(VIL_WIN_W%+VIL_WIN_RB%-1,VIL_WIN_Z%+VIL_WIN_DB%-1)-(VIL_WIN_W%+VIL_WIN_RB%-1,VIL_WIN_Y%-14),%1
  844. 15535 CONNECT(VIL_WIN_X%-5,VIL_WIN_Z%+VIL_WIN_DB%-2)-(VIL_WIN_W%+VIL_WIN_RB%-2,VIL_WIN_Z%+VIL_WIN_DB%-2)-(VIL_WIN_W%+VIL_WIN_RB%-2,VIL_WIN_Y%-14),%1
  845. 15540 CONNECT(VIL_WIN_W%+1,VIL_WIN_Y%-2)-(VIL_WIN_X%-2,VIL_WIN_Y%-2)-(VIL_WIN_X%-2,VIL_WIN_Z%+1),%1
  846. 15545 CONNECT(VIL_WIN_W%,VIL_WIN_Y%-1)-(VIL_WIN_X%-1,VIL_WIN_Y%-1)-(VIL_WIN_X%-1,VIL_WIN_Z%),%1
  847. 15550 CONNECT(VIL_WIN_X%-2,VIL_WIN_Z%+2)-(VIL_WIN_W%+2,VIL_WIN_Z%+2)-(VIL_WIN_W%+2,VIL_WIN_Y%-2),%3
  848. 15555 CONNECT(VIL_WIN_X%-1,VIL_WIN_Z%+1)-(VIL_WIN_W%+1,VIL_WIN_Z%+1)-(VIL_WIN_W%+1,VIL_WIN_Y%-1),%3
  849. 15560 IF VIL_VWM_AT%AND 6 THEN
  850. 15565 LINE(VIL_WIN_X%+11,VIL_WIN_Y%-13)-(VIL_WIN_X%+11,VIL_WIN_Y%-3),PSET,%1
  851. 15570 LINE(VIL_WIN_X%+12,VIL_WIN_Y%-13)-(VIL_WIN_X%+12,VIL_WIN_Y%-3),PSET,%3
  852. 15575 ENDIF
  853. 15580 IF VIL_VWM_AT%AND 17 THEN
  854. 15585 LINE(VIL_WIN_W%-11,VIL_WIN_Y%-13)-(VIL_WIN_W%-11,VIL_WIN_Y%-3),PSET,%3
  855. 15590 LINE(VIL_WIN_W%-12,VIL_WIN_Y%-13)-(VIL_WIN_W%-12,VIL_WIN_Y%-3),PSET,%1
  856. 15595 ENDIF
  857. 15600 IF VIL_VWM_AT%AND 2 THEN
  858. 15605 LINE(VIL_WIN_X%-2,VIL_WIN_Y%-13)-(VIL_WIN_X%-2,VIL_WIN_Y%-3),PSET,%1
  859. 15610 LINE(VIL_WIN_X%-1,VIL_WIN_Y%-13)-(VIL_WIN_X%-1,VIL_WIN_Y%-3),PSET,%3
  860. 15615 LINE(VIL_WIN_X%,VIL_WIN_Y%-13)-(VIL_WIN_X%+10,VIL_WIN_Y%-3),PSET,%3
  861. 15620 LINE(VIL_WIN_X%,VIL_WIN_Y%-12)-(VIL_WIN_X%+9,VIL_WIN_Y%-3),PSET,%1
  862. 15625 LINE(VIL_WIN_X%,VIL_WIN_Y%-3)-(VIL_WIN_X%+10,VIL_WIN_Y%-13),PSET,%3
  863. 15630 LINE(VIL_WIN_X%,VIL_WIN_Y%-4)-(VIL_WIN_X%+9,VIL_WIN_Y%-13),PSET,%1
  864. 15635 ENDIF
  865. 15640 IF VIL_VWM_AT%AND 4 THEN
  866. 15645 LINE(VIL_WIN_X%+24,VIL_WIN_Y%-13)-(VIL_WIN_X%+24,VIL_WIN_Y%-3),PSET,%1
  867. 15650 LINE(VIL_WIN_X%+25,VIL_WIN_Y%-13)-(VIL_WIN_X%+25,VIL_WIN_Y%-3),PSET,%3
  868. 15655 LINE(VIL_WIN_X%+13,VIL_WIN_Y%-3)-(VIL_WIN_X%+23,VIL_WIN_Y%-13),PSET,%3
  869. 15660 LINE(VIL_WIN_X%+13,VIL_WIN_Y%-4)-(VIL_WIN_X%+22,VIL_WIN_Y%-13),PSET,%1
  870. 15665 ENDIF
  871. 15670 IF VIL_VWM_AT%AND 1 THEN
  872. 15675 LINE(VIL_WIN_W%-24,VIL_WIN_Y%-13)-(VIL_WIN_W%-24,VIL_WIN_Y%-3),PSET,%3
  873. 15680 LINE(VIL_WIN_W%-25,VIL_WIN_Y%-13)-(VIL_WIN_W%-25,VIL_WIN_Y%-3),PSET,%1
  874. 15685 LINE(VIL_WIN_W%-15,VIL_WIN_Y%-9)-(VIL_WIN_W%-21,VIL_WIN_Y%-9),PSET,%1
  875. 15690 LINE(VIL_WIN_W%-15,VIL_WIN_Y%-8)-(VIL_WIN_W%-21,VIL_WIN_Y%-8),PSET,%3
  876. 15695 ENDIF
  877. 15700 IF VIL_VWM_AT%AND 16 THEN
  878. 15705 LINE(VIL_WIN_W%+2,VIL_WIN_Y%-13)-(VIL_WIN_W%+2,VIL_WIN_Y%-3),PSET,%3
  879. 15710 LINE(VIL_WIN_W%+1,VIL_WIN_Y%-13)-(VIL_WIN_W%+1,VIL_WIN_Y%-3),PSET,%1
  880. 15715 LINE(VIL_WIN_W%-10,VIL_WIN_Y%-9)-(VIL_WIN_W%-4,VIL_WIN_Y%-9),PSET,%3
  881. 15720 LINE(VIL_WIN_W%-10,VIL_WIN_Y%-10)-(VIL_WIN_W%-3,VIL_WIN_Y%-10),PSET,%1
  882. 15725 LINE(VIL_WIN_W%-3,VIL_WIN_Y%-10)-(VIL_WIN_W%-3,VIL_WIN_Y%-3),PSET,%3
  883. 15730 LINE(VIL_WIN_W%-4,VIL_WIN_Y%-9)-(VIL_WIN_W%-4,VIL_WIN_Y%-3),PSET,%1
  884. 15735 ENDIF
  885. 15740 IF VIL_VWM_AT%AND 4096 THEN
  886. 15745 LINE(VIL_WIN_X%-2,VIL_WIN_Z%+2)-(VIL_WIN_X%-2,VIL_WIN_Z%+13),PSET,%1
  887. 15750 LINE(VIL_WIN_X%-1,VIL_WIN_Z%+3)-(VIL_WIN_X%-1,VIL_WIN_Z%+13),PSET,%3
  888. 15755 LINE(VIL_WIN_W%+2,VIL_WIN_Z%+3)-(VIL_WIN_W%+2,VIL_WIN_Z%+13),PSET,%3
  889. 15760 LINE(VIL_WIN_W%+1,VIL_WIN_Z%+3)-(VIL_WIN_W%+1,VIL_WIN_Z%+13),PSET,%1
  890. 15765 VIL_SBAR_X%=VIL_WIN_X%:VIL_SBAR_W%=VIL_WIN_W%:VIL_SBAR_Y%=VIL_WIN_Z%+3
  891. 15770 VIL_SBAR_LBL%=VIL_VWM_XLBL%:VIL_SBAR_LIL%=VIL_VWM_XLIL%:VIL_SBAR_LIP%=VIL_VWM_XLIP%
  892. 15775 GOSUB*VIL_SBAR_XDRAW
  893. 15780 ENDIF
  894. 15785 IF VIL_VWM_AT%AND 8192 THEN
  895. 15790 LINE(VIL_WIN_W%+2,VIL_WIN_Y%-2)-(VIL_WIN_W%+13,VIL_WIN_Y%-2),PSET,%1
  896. 15795 LINE(VIL_WIN_W%+3,VIL_WIN_Y%-1)-(VIL_WIN_W%+13,VIL_WIN_Y%-1),PSET,%3
  897. 15800 LINE(VIL_WIN_W%+3,VIL_WIN_Z%+2)-(VIL_WIN_W%+13,VIL_WIN_Z%+2),PSET,%3
  898. 15805 LINE(VIL_WIN_W%+3,VIL_WIN_Z%+1)-(VIL_WIN_W%+13,VIL_WIN_Z%+1),PSET,%1
  899. 15810 VIL_SBAR_Y%=VIL_WIN_Y%:VIL_SBAR_Z%=VIL_WIN_Z%:VIL_SBAR_X%=VIL_WIN_W%+3
  900. 15815 VIL_SBAR_LBL%=VIL_VWM_YLBL%:VIL_SBAR_LIL%=VIL_VWM_YLIL%:VIL_SBAR_LIP%=VIL_VWM_YLIP%
  901. 15820 GOSUB*VIL_SBAR_YDRAW
  902. 15825 ENDIF
  903. 15830 VIL_W0%=INT(VIL_WIN_W%-VIL_WIN_X%-60)/5
  904. 15835 IF VIL_W0%>0 THEN
  905. 15840 SYMBOL(VIL_WIN_X%+30,VIL_WIN_Y%-11),LEFT$(VIL_VWM_T$,VIL_W0%),.5!,.5!,%1,,,,1
  906. 15845 ENDIF
  907. 15850 LINE(VIL_WIN_X%(VIL_WIN_AN%)+28,VIL_WIN_Y%(VIL_WIN_AN%)-12)-(VIL_WIN_W%(VIL_WIN_AN%)-28,VIL_WIN_Y%(VIL_WIN_AN%)-4),XOR,%3,BF
  908. 15855 ENDIF
  909. 15860 ENDIF
  910. 15865 GOSUB*VIL_WIN_PMR
  911. 15870 RETURN
  912. 15875 *VIL_VWM_CL
  913. 15880 IF VIL_VWM_N%THEN VIL_VWM_X%(VIL_VWM_N%)=VIL_WIN_X%:VIL_VWM_Y%(VIL_VWM_N%)=VIL_WIN_Y%:VIL_VWM_W%(VIL_VWM_N%)=VIL_WIN_W%:VIL_VWM_Z%(VIL_VWM_N%)=VIL_WIN_Z%
  914. 15885 GOSUB*VIL_WIN_PMA
  915. 15890 GOSUB*VIL_WIN_CL
  916. 15895 VIL_VWM_AT%=VIL_VWM_AT%(VIL_WIN_AN%)
  917. 15900 VIL_VWM_T$=VIL_VWM_T$(VIL_WIN_AN%)
  918. 15905 VIL_VWM_N%=VIL_VWM_N%(VIL_WIN_AN%)
  919. 15910 VIL_WIN_UB%=VIL_VWM_UB%(VIL_VWM_FW%(VIL_WIN_AN%)):VIL_WIN_DB%=VIL_VWM_DB%(VIL_VWM_FW%(VIL_WIN_AN%))
  920. 15915 VIL_WIN_LB%=VIL_VWM_LB%(VIL_VWM_FW%(VIL_WIN_AN%)):VIL_WIN_RB%=VIL_VWM_RB%(VIL_VWM_FW%(VIL_WIN_AN%))
  921. 15920 IF VIL_WIN_AN%THEN LINE(VIL_WIN_X%+28,VIL_WIN_Y%-12)-(VIL_WIN_W%-28,VIL_WIN_Y%-4),XOR,%3,BF
  922. 15925 GOSUB*VIL_WIN_PMR
  923. 15930 RETURN
  924. 15935 *VIL_VWM_CLDMY
  925. 15940 IF VIL_VWM_N%THEN VIL_VWM_X%(VIL_VWM_N%)=VIL_WIN_X%:VIL_VWM_Y%(VIL_VWM_N%)=VIL_WIN_Y%:VIL_VWM_W%(VIL_VWM_N%)=VIL_WIN_W%:VIL_VWM_Z%(VIL_VWM_N%)=VIL_WIN_Z%
  926. 15945 GOSUB*VIL_WIN_PMA
  927. 15950 GOSUB*VIL_WIN_CLDMY
  928. 15955 LINE(VIL_WIN_X%(VIL_WIN_AN%+1)+28,VIL_WIN_Y%(VIL_WIN_AN%+1)-12)-(VIL_WIN_W%(VIL_WIN_AN%+1)-28,VIL_WIN_Y%(VIL_WIN_AN%+1)-4),XOR,%3,BF
  929. 15960 VIL_VWM_AT%=VIL_VWM_AT%(VIL_WIN_AN%)
  930. 15965 VIL_VWM_T$=VIL_VWM_T$(VIL_WIN_AN%)
  931. 15970 VIL_VWM_N%=VIL_VWM_N%(VIL_WIN_AN%)
  932. 15975 VIL_WIN_UB%=VIL_VWM_UB%(VIL_VWM_FW%(VIL_WIN_AN%)):VIL_WIN_DB%=VIL_VWM_DB%(VIL_VWM_FW%(VIL_WIN_AN%))
  933. 15980 VIL_WIN_LB%=VIL_VWM_LB%(VIL_VWM_FW%(VIL_WIN_AN%)):VIL_WIN_RB%=VIL_VWM_RB%(VIL_VWM_FW%(VIL_WIN_AN%))
  934. 15985 IF VIL_WIN_AN%THEN LINE(VIL_WIN_X%+28,VIL_WIN_Y%-12)-(VIL_WIN_W%-28,VIL_WIN_Y%-4),XOR,%3,BF
  935. 15990 GOSUB*VIL_WIN_PMR
  936. 15995 RETURN
  937. 16000 *VIL_VWM_CLALL
  938. 16005 WHILE VIL_WIN_AN%
  939. 16010 GOSUB*VIL_VWM_CL
  940. 16015 WEND
  941. 16020 RETURN
  942. 16025 *VIL_VWM_CLS
  943. 16030 LINE(0,0)-(VIL_WIN_W%-VIL_WIN_X%,VIL_WIN_Z%-VIL_WIN_Y%),PSET,%VIL_VWM_CB%,BF
  944. 16035 RETURN
  945. 16040 *VIL_VWM_CHECK
  946. 16045 VIL_VWM_R%=0
  947. 16050 IF VIL_KN%=-2 THEN
  948. 16055 GOSUB*VIL_VWM_WIN
  949. 16060 ELSE IF VIL_VKEY_KY%=-13 THEN
  950. 16065 VIL_WIN_X%=VIL_WIN_W%+(VIL_WIN_W%-582)*(VIL_WIN_W%>582)
  951. 16070 VIL_WIN_Y%=VIL_WIN_Y%-32+(VIL_WIN_Y%-46)*(VIL_WIN_Y%<46)+(VIL_WIN_Y%-406)*(VIL_WIN_Y%>406)
  952. 16075 GOSUB*VIL_VWM_MENU
  953. 16080 ENDIF
  954. 16085 RETURN
  955. 16090 *VIL_VWM_WIN
  956. 16095 VIL_VWM_R%=0
  957. 16100 IF(VIL_VWM_AT%AND 2)=2 AND VIL_WIN_X%-2<VIL_MX%AND VIL_MX%<VIL_WIN_X%+12 AND VIL_WIN_Y%-16<VIL_MY%AND VIL_MY%<VIL_WIN_Y%THEN
  958. 16105 GOSUB*VIL_VWM_CLOSE
  959. 16110 ELSE IF(VIL_VWM_AT%AND 4)=4 AND VIL_WIN_X%+11<VIL_MX%AND VIL_MX%<VIL_WIN_X%+25 AND VIL_WIN_Y%-16<VIL_MY%AND VIL_MY%<VIL_WIN_Y%THEN
  960. 16115 GOSUB*VIL_VWM_HIDE
  961. 16120 ELSE IF(VIL_VWM_AT%AND 1)=1 AND VIL_WIN_W%-25<VIL_MX%AND VIL_MX%<VIL_WIN_W%-11 AND VIL_WIN_Y%-16<VIL_MY%AND VIL_MY%<VIL_WIN_Y%THEN
  962. 16125 VIL_WIN_X%=VIL_WIN_W%+(VIL_WIN_W%-582)*(VIL_WIN_W%>582)
  963. 16130 VIL_WIN_Y%=VIL_WIN_Y%-32+(VIL_WIN_Y%-46)*(VIL_WIN_Y%<46)+(VIL_WIN_Y%-406)*(VIL_WIN_Y%>406)
  964. 16135 GOSUB*VIL_VWM_MENU
  965. 16140 ELSE IF(VIL_VWM_AT%AND 16)=16 AND VIL_WIN_W%-12<VIL_MX%AND VIL_MX%<VIL_WIN_W%+2 AND VIL_WIN_Y%-16<VIL_MY%AND VIL_MY%<VIL_WIN_Y%THEN
  966. 16145 GOSUB*VIL_VWM_RESIZE
  967. 16150 ELSE IF(VIL_VWM_AT%AND 8)=8 AND VIL_WIN_X%-6<VIL_MX%AND VIL_MX%<VIL_WIN_W%+6 AND VIL_WIN_Y%-16<VIL_MY%AND VIL_MY%<VIL_WIN_Y%THEN
  968. 16155 GOSUB*VIL_VWM_MOVE
  969. 16160 ELSE IF(VIL_VWM_AT%AND 4096)=4096 AND VIL_WIN_X%-2<VIL_MX%AND VIL_MX%<VIL_WIN_W%+2 AND VIL_WIN_Z%<VIL_MY%AND VIL_MY%<VIL_WIN_Z%+16 THEN
  970. 16165 GOSUB*VIL_VWM_XSCRLBAR
  971. 16170 ELSE IF(VIL_VWM_AT%AND 8192)=8192 AND VIL_WIN_W%+2<VIL_MX%AND VIL_MX%<VIL_WIN_W%+14 AND VIL_WIN_Y%-1<VIL_MY%AND VIL_MY%<VIL_WIN_Z%+1 THEN
  972. 16175 GOSUB*VIL_VWM_YSCRLBAR
  973. 16180 ENDIF
  974. 16185 RETURN
  975. 16190 *VIL_VWM_MENU
  976. 16195 GOSUB*VIL_WIN_PMA
  977. 16200 LINE(VIL_WIN_X%(VIL_WIN_AN%)+28,VIL_WIN_Y%(VIL_WIN_AN%)-12)-(VIL_WIN_W%(VIL_WIN_AN%)-28,VIL_WIN_Y%(VIL_WIN_AN%)-4),XOR,%3,BF
  978. 16205 VIL_VWM_ATB%=VIL_VWM_AT%
  979. 16210 VIL_WIN_W%=VIL_WIN_X%+49:VIL_WIN_Z%=VIL_WIN_Y%+97
  980. 16215 VIL_VWM_T$="VWM":VIL_VWM_AT%=0:VIL_VWM_N%=0
  981. 16220 GOSUB*VIL_VWM_OP
  982. 16225 SYMBOL(5,0),"<VWM>",1,1,6
  983. 16230 SYMBOL(1,20),"CLOSE",1,1,%1-((VIL_VWM_ATB%AND 2)=2)*2
  984. 16235 SYMBOL(1,36),"HIDE",1,1,%1-((VIL_VWM_ATB%AND 4)=4)*2
  985. 16240 SYMBOL(1,52),"MOVE",1,1,%1-((VIL_VWM_ATB%AND 8)=8)*2
  986. 16245 SYMBOL(1,68),"RESIZE",1,1,%1-((VIL_VWM_ATB%AND 16)=16)*2
  987. 16250 SYMBOL(1,84),"<INFO>",1,1,%3
  988. 16255 VIL_X%=1:VIL_Y%=20:VIL_W%=VIL_X%+47:VIL_Z%=VIL_Y%+14
  989. 16260 VIL_YL%=16:VIL_XN%=1:VIL_YN%=5:VIL_MSEL_BD%=0:VIL_C%=15
  990. 16265 VIL_MSEL_BC%=0:VIL_MSEL_MN%=0:VIL_MSEL_BN%=1
  991. 16270 VIL_MSEL_BB%=1:VIL_MSEL_BE%=5
  992. 16275 *VIL_VWM_MENU_W0
  993. 16280 GOSUB*VIL_MSEL_M
  994. 16285 IF VIL_KN%=-3 OR(0<VIL_KN%AND VIL_KN%<5 AND(VIL_VWM_ATB%AND 2^VIL_KN%)=0)                THEN *VIL_VWM_MENU_W0
  995. 16290 GOSUB*VIL_VWM_CL
  996. 16295 GOSUB*VIL_WIN_PMA
  997. 16300 LINE(VIL_WIN_X%(VIL_WIN_AN%)+28,VIL_WIN_Y%(VIL_WIN_AN%)-12)-(VIL_WIN_W%(VIL_WIN_AN%)-28,VIL_WIN_Y%(VIL_WIN_AN%)-4),XOR,%3,BF
  998. 16305 GOSUB*VIL_WIN_PMR
  999. 16310 IF VIL_KN%<1 THEN RETURN
  1000. 16315 ON VIL_KN%GOTO*VIL_VWM_MENU_W1,*VIL_VWM_MENU_W2,*VIL_VWM_MENU_W3,*VIL_VWM_MENU_W4,*VIL_VWM_MENU_W5
  1001. 16320 *VIL_VWM_MENU_W1
  1002. 16325 GOSUB*VIL_VWM_CLOSE
  1003. 16330 RETURN
  1004. 16335 *VIL_VWM_MENU_W2
  1005. 16340 IF VIL_VKEY_KY%=-4 THEN GOSUB*VIL_VWM_HIDE ELSE GOSUB*VIL_VWM_KHIDE
  1006. 16345 RETURN
  1007. 16350 *VIL_VWM_MENU_W3
  1008. 16355 IF VIL_VKEY_KY%=-4 THEN
  1009. 16360 VIL_MX%=(VIL_WIN_X%+VIL_WIN_W%)\2:VIL_MY%=VIL_WIN_Y%-4
  1010. 16365 MOUSE 1,VIL_MX%,VIL_MY%
  1011. 16370 GOSUB*VIL_VWM_MOVE
  1012. 16375 ELSE
  1013. 16380 GOSUB*VIL_VWM_KMOVE
  1014. 16385 ENDIF
  1015. 16390 RETURN
  1016. 16395 *VIL_VWM_MENU_W4
  1017. 16400 IF VIL_VKEY_KY%=-4 THEN
  1018. 16405 VIL_MX%=VIL_WIN_W%:VIL_MY%=VIL_WIN_Y%-6
  1019. 16410 MOUSE 1,VIL_MX%,VIL_MY%
  1020. 16415 GOSUB*VIL_VWM_RESIZE
  1021. 16420 ELSE
  1022. 16425 GOSUB*VIL_VWM_KRESIZE
  1023. 16430 ENDIF
  1024. 16435 RETURN
  1025. 16440 *VIL_VWM_MENU_W5
  1026. 16445 VIL_WIN_X%=VIL_WIN_X%+(VIL_WIN_X%-448)*(VIL_WIN_X%>448)
  1027. 16450 VIL_WIN_Y%=VIL_WIN_Y%+(VIL_WIN_Y%-380)*(VIL_WIN_Y%>380)
  1028. 16455 GOSUB*VIL_VWM_INF
  1029. 16460 RETURN
  1030. 16465 *VIL_VWM_INF
  1031. 16470 VIL_WIN_W%=VIL_WIN_X%+183:VIL_WIN_Z%=VIL_WIN_Y%+91
  1032. 16475 VIL_VWM_T$="VWM INFORMATION":VIL_VWM_AT%=0:VIL_VWM_N%=0
  1033. 16480 VIL_E%=0
  1034. 16485 GOSUB*VIL_VWM_OP
  1035. 16490 IF VIL_E%=0 THEN
  1036. 16495 SYMBOL(8,8),"POSITION:("+FNVIL_P2S0$(VIL_WIN_X%(VIL_WIN_AN%-1),3)+","+FNVIL_P2S0$(VIL_WIN_Y%(VIL_WIN_AN%-1),3)+")",1,1,4
  1037. 16500 SYMBOL(8,28),"SIZE    : "+FNVIL_P2S0$(VIL_WIN_W%(VIL_WIN_AN%-1)-VIL_WIN_X%(VIL_WIN_AN%-1)+1,3)+"×"+FNVIL_P2S0$(VIL_WIN_Z%(VIL_WIN_AN%-1)-VIL_WIN_Y%(VIL_WIN_AN%-1)+1,3),1,1,4
  1038. 16505 SYMBOL(8,48),"WINDOW  : "+FNVIL_P2S0$(VIL_WIN_AN%-1,3)+"/"+FNVIL_P2S0$(VIL_WIN_ANMAX%,3),1,1,4
  1039. 16510 SYMBOL(8,68),"FREE    : "+FNVIL_P2S0$((VIL_WIN_BFMAX&-VIL_WIN_BFO&(VIL_WIN_AN%-1))\512,4)+"K/"+FNVIL_P2S0$(VIL_WIN_BFMAX&\512,4)+"K",1,1,4
  1040. 16515 GOSUB*VIL_INP_MVWAIT
  1041. 16520 GOSUB*VIL_VWM_CL
  1042. 16525 ENDIF
  1043. 16530 RETURN
  1044. 16535 *VIL_VWM_MOVE
  1045. 16540 MOUSE 2,VIL_VWM_MCA1$,VIL_VWM_MCD1$,VIL_VWM_MCX1%,VIL_VWM_MCY1%
  1046. 16545 MOUSE 1,VIL_MX%,VIL_MY%,1
  1047. 16550 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB*VIL_WIN_PMA
  1048. 16555 VIL_WIN_X%=VIL_WIN_X%-VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%-VIL_WIN_UB%
  1049. 16560 VIL_WIN_W%=VIL_WIN_W%+VIL_WIN_RB%:VIL_WIN_Z%=VIL_WIN_Z%+VIL_WIN_DB%
  1050. 16565 MOUSE 4,VIL_VWM_XM%+VIL_MX%-VIL_WIN_X%,VIL_VWM_YM%+VIL_MY%-VIL_WIN_Y%,VIL_VWM_WM%+VIL_MX%-VIL_WIN_W%,VIL_VWM_ZM%+VIL_MY%-VIL_WIN_Z%
  1051. 16570 VIL_W0%=0:VIL_W1%=0:VIL_W2%=0:VIL_W3%=0
  1052. 16575 VIL_WIN_W%=VIL_WIN_W%-VIL_WIN_X%:VIL_WIN_Z%=VIL_WIN_Z%-VIL_WIN_Y%
  1053. 16580 LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  1054. 16585 WHILE MOUSE(2,0)
  1055. 16590 VIL_MX%=MOUSE(9):VIL_MY%=MOUSE(10)
  1056. 16595 IF VIL_MX%OR VIL_MY%THEN
  1057. 16600 LINE(VIL_WIN_X%+VIL_W2%,VIL_WIN_Y%+VIL_W3%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  1058. 16605 VIL_W0%=VIL_W0%+VIL_MX%:VIL_W1%=VIL_W1%+VIL_MY%
  1059. 16610 VIL_W2%=VIL_W0%-VIL_W0%MOD VIL_VWM_XD%
  1060. 16615 VIL_W3%=VIL_W1%-VIL_W1%MOD VIL_VWM_YD%
  1061. 16620 LINE(VIL_WIN_X%+VIL_W2%,VIL_WIN_Y%+VIL_W3%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  1062. 16625 ENDIF
  1063. 16630 WEND
  1064. 16635 VIL_WIN_X%=VIL_WIN_X%+VIL_W2%:VIL_WIN_Y%=VIL_WIN_Y%+VIL_W3%
  1065. 16640 LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  1066. 16645 IF MOUSE(2,1)THEN
  1067. 16650 VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%):VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
  1068. 16655 VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%):VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
  1069. 16660 ELSE
  1070. 16665 VIL_WIN_X%=VIL_WIN_X%+VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%+VIL_WIN_UB%
  1071. 16670 GOSUB*VIL_VWM_MV
  1072. 16675 ENDIF
  1073. 16680 MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
  1074. 16685 MOUSE 4,0,0,639,479
  1075. 16690 IF VIL_VWM_PMB%THEN GOSUB*VIL_WIN_PMR
  1076. 16695 RETURN
  1077. 16700 *VIL_VWM_KMOVE
  1078. 16705 WHILE INKEY$<>"":WEND
  1079. 16710 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB*VIL_WIN_PMA
  1080. 16715 VIL_WIN_X%=VIL_WIN_X%-VIL_WIN_LB%
  1081. 16720 VIL_WIN_Y%=VIL_WIN_Y%-VIL_WIN_UB%
  1082. 16725 VIL_WIN_W%=VIL_WIN_W%-VIL_WIN_X%+VIL_WIN_RB%
  1083. 16730 VIL_WIN_Z%=VIL_WIN_Z%-VIL_WIN_Y%+VIL_WIN_DB%
  1084. 16735 LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  1085. 16740 VIL_VKEY_KY%=0
  1086. 16745 WHILE VIL_VKEY_KY%<>-1 AND VIL_VKEY_KY%<>-2
  1087. 16750 *VIL_VWM_KMOVE_W0
  1088. 16755 GOSUB*VIL_VKEY_KY
  1089. 16760 IF VIL_VKEY_KY%=-4 THEN*VIL_VWM_KMOVE_W0
  1090. 16765 LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  1091. 16770 VIL_WIN_X%=VIL_WIN_X%+((VIL_VKEY_KY%=-6)-(VIL_VKEY_KY%=-5))*VIL_VWM_XD%
  1092. 16775 VIL_WIN_X%=VIL_WIN_X%-((VIL_WIN_X%+VIL_WIN_LB%<VIL_VWM_XM%)-(VIL_VWM_WM%<VIL_WIN_X%+VIL_WIN_W%-VIL_WIN_RB%))*VIL_VWM_XD%
  1093. 16780 VIL_WIN_X%=VIL_WIN_X%+((VIL_VKEY_KY%=-10)-(VIL_VKEY_KY%=-9))*VIL_VWM_XD%*8
  1094. 16785 VIL_WIN_X%=VIL_WIN_X%-((VIL_WIN_X%+VIL_WIN_LB%<VIL_VWM_XM%)-(VIL_VWM_WM%<VIL_WIN_X%+VIL_WIN_W%-VIL_WIN_RB%))*VIL_VWM_XD%*8
  1095. 16790 VIL_WIN_Y%=VIL_WIN_Y%+((VIL_VKEY_KY%=-7)-(VIL_VKEY_KY%=-8))*VIL_VWM_YD%
  1096. 16795 VIL_WIN_Y%=VIL_WIN_Y%-((VIL_WIN_Y%+VIL_WIN_UB%<VIL_VWM_YM%)-(VIL_VWM_ZM%<VIL_WIN_Y%+VIL_WIN_Z%-VIL_WIN_DB%))*VIL_VWM_YD%
  1097. 16800 VIL_WIN_Y%=VIL_WIN_Y%+((VIL_VKEY_KY%=-11)-(VIL_VKEY_KY%=-12))*VIL_VWM_YD%*8
  1098. 16805 VIL_WIN_Y%=VIL_WIN_Y%-((VIL_WIN_Y%+VIL_WIN_UB%<VIL_VWM_YM%)-(VIL_VWM_ZM%<VIL_WIN_Y%+VIL_WIN_Z%-VIL_WIN_DB%))*VIL_VWM_YD%*8
  1099. 16810 LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  1100. 16815 WEND
  1101. 16820 LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  1102. 16825 IF VIL_VKEY_KY%=-2 THEN
  1103. 16830 VIL_WIN_X%=VIL_WIN_X%+VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%+VIL_WIN_UB%
  1104. 16835 GOSUB*VIL_VWM_MV
  1105. 16840 ELSE
  1106. 16845 VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
  1107. 16850 VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
  1108. 16855 VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)
  1109. 16860 VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
  1110. 16865 ENDIF
  1111. 16870 IF VIL_VWM_PMB%THEN GOSUB*VIL_WIN_PMR
  1112. 16875 RETURN
  1113. 16880 *VIL_VWM_MV
  1114. 16885 VIL_E%=0
  1115. 16890 VIL_W0%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:VIL_W1%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%
  1116. 16895 VIL_W2%=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%:VIL_W3%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%
  1117. 16900 GET@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%)
  1118. 16905 IF VIL_E%=0 THEN
  1119. 16910 VIL_WIN_W%=VIL_WIN_X%+VIL_WIN_W%(VIL_WIN_AN%)-VIL_WIN_X%(VIL_WIN_AN%)
  1120. 16915 VIL_WIN_Z%=VIL_WIN_Y%+VIL_WIN_Z%(VIL_WIN_AN%)-VIL_WIN_Y%(VIL_WIN_AN%)
  1121. 16920 PUT@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%-1)
  1122. 16925 GET@A(VIL_WIN_X%-VIL_WIN_LB%,VIL_WIN_Y%-VIL_WIN_UB%)-(VIL_WIN_W%+VIL_WIN_RB%,VIL_WIN_Z%+VIL_WIN_DB%),VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%-1)
  1123. 16930 PUT@A(VIL_WIN_X%-VIL_WIN_LB%,VIL_WIN_Y%-VIL_WIN_UB%)-(VIL_WIN_W%+VIL_WIN_RB%,VIL_WIN_Z%+VIL_WIN_DB%),VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%)
  1124. 16935 VIL_WIN_X%(VIL_WIN_AN%)=VIL_WIN_X%
  1125. 16940 VIL_WIN_Y%(VIL_WIN_AN%)=VIL_WIN_Y%
  1126. 16945 VIL_WIN_W%(VIL_WIN_AN%)=VIL_WIN_W%
  1127. 16950 VIL_WIN_Z%(VIL_WIN_AN%)=VIL_WIN_Z%
  1128. 16955 VIL_VWM_R%=8
  1129. 16960 ELSE
  1130. 16965 VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
  1131. 16970 VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
  1132. 16975 VIL_VWM_R%=0
  1133. 16980 ENDIF
  1134. 16985 RETURN
  1135. 16990 *VIL_VWM_CLOSE
  1136. 16995 GOSUB*VIL_VWM_CL
  1137. 17000 VIL_VWM_R%=2
  1138. 17005 RETURN
  1139. 17010 *VIL_VWM_HIDE
  1140. 17015 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB*VIL_WIN_PMA
  1141. 17020 GOSUB*VIL_VWM_HD0
  1142. 17025 IF VIL_E%=0 THEN
  1143. 17030 WHILE MOUSE(2,0):WEND
  1144. 17035 GOSUB*VIL_VWM_HD1
  1145. 17040 VIL_VWM_R%=4
  1146. 17045 ELSE
  1147. 17050 VIL_VWM_R%=0
  1148. 17055 ENDIF
  1149. 17060 IF VIL_VWM_PMB%THEN GOSUB*VIL_WIN_PMR
  1150. 17065 RETURN
  1151. 17070 *VIL_VWM_KHIDE
  1152. 17075 WHILE INKEY$<>"":WEND
  1153. 17080 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB*VIL_WIN_PMA
  1154. 17085 GOSUB*VIL_VWM_HD0
  1155. 17090 IF VIL_E%=0 THEN
  1156. 17095 VIL_VKEY_KY%=-4:WHILE VIL_VKEY_KY%=-4:GOSUB*VIL_VKEY_KY:WEND
  1157. 17100 GOSUB*VIL_VWM_HD1
  1158. 17105 VIL_VWM_R%=4
  1159. 17110 ENDIF
  1160. 17115 IF VIL_VWM_PMB%THEN GOSUB*VIL_WIN_PMR
  1161. 17120 RETURN
  1162. 17125 *VIL_VWM_HD0
  1163. 17130 VIL_E%=0
  1164. 17135 VIL_W0%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:VIL_W1%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%
  1165. 17140 VIL_W2%=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%:VIL_W3%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%
  1166. 17145 GET@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%)
  1167. 17150 IF VIL_E%=0 THEN
  1168. 17155 PUT@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%-1)
  1169. 17160 ENDIF
  1170. 17165 RETURN
  1171. 17170 *VIL_VWM_HD1
  1172. 17175 VIL_W0%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:VIL_W1%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%
  1173. 17180 VIL_W2%=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%:VIL_W3%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%
  1174. 17185 PUT@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%)
  1175. 17190 RETURN
  1176. 17195 *VIL_VWM_HD2
  1177. 17200 VIL_W0%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:VIL_W1%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%
  1178. 17205 VIL_W2%=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%:VIL_W3%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%
  1179. 17210 GET@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%-1)
  1180. 17215 PUT@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%)
  1181. 17220 RETURN
  1182. 17225 *VIL_VWM_RESIZE
  1183. 17230 MOUSE 2,VIL_VWM_MCA2$,VIL_VWM_MCD2$,VIL_VWM_MCX2%,VIL_VWM_MCY2%
  1184. 17235 MOUSE 1,VIL_MX%,VIL_MY%,1
  1185. 17240 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB*VIL_WIN_PMA
  1186. 17245 VIL_W0%=VIL_WIN_W%-VIL_VWM_WL%-VIL_VWM_XM%+1
  1187. 17250 VIL_W1%=VIL_WIN_Z%-VIL_VWM_ZL%-VIL_VWM_YM%+1
  1188. 17255 VIL_W2%=VIL_WIN_X%+VIL_VWM_WL%-VIL_VWM_WM%-1
  1189. 17260 VIL_W3%=VIL_WIN_Y%+VIL_VWM_ZL%-VIL_VWM_ZM%-1
  1190. 17265 VIL_W0%=VIL_VWM_XM%-VIL_W0%*(VIL_W0%>0)
  1191. 17270 VIL_W1%=VIL_VWM_YM%-VIL_W1%*(VIL_W1%>0)
  1192. 17275 VIL_W2%=VIL_VWM_WM%-VIL_W2%*(VIL_W2%<0)
  1193. 17280 VIL_W3%=VIL_VWM_ZM%-VIL_W3%*(VIL_W3%<0)
  1194. 17285 MOUSE 4,VIL_W0%,VIL_W1%,VIL_W2%,VIL_W3%
  1195. 17290 VIL_WIN_X%=VIL_WIN_X%-VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%-VIL_WIN_UB%:VIL_WIN_W%=VIL_WIN_W%+VIL_WIN_RB%:VIL_WIN_Z%=VIL_WIN_Z%+VIL_WIN_DB%
  1196. 17295 VIL_W0%=0:VIL_W1%=0
  1197. 17300 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  1198. 17305 WHILE MOUSE(2,0)
  1199. 17310 IF MOUSE(9)OR MOUSE(10)THEN
  1200. 17315 VIL_MX%=MOUSE(0):VIL_MY%=MOUSE(1)
  1201. 17320 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  1202. 17325 IF VIL_MX%<=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%THEN
  1203. 17330 VIL_WIN_X%=VIL_MX%+(VIL_WIN_X%-VIL_MX%)MOD VIL_VWM_WD%
  1204. 17335 VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%:VIL_W0%=1
  1205. 17340 ELSE IF VIL_MX%>=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%THEN
  1206. 17345 VIL_WIN_W%=VIL_MX%-(VIL_MX%-VIL_WIN_W%)MOD VIL_VWM_WD%
  1207. 17350 VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:VIL_W0%=2
  1208. 17355 ELSE
  1209. 17360 IF VIL_W0%=1 THEN
  1210. 17365 VIL_W2%=VIL_WIN_W%-VIL_VWM_XL%-(VIL_WIN_LB%+VIL_WIN_RB%-1)-VIL_MX%
  1211. 17370 VIL_W2%=VIL_MX%-VIL_W2%*(VIL_W2%<0)
  1212. 17375 VIL_WIN_X%=VIL_W2%+(VIL_WIN_X%-VIL_W2%)MOD VIL_VWM_WD%
  1213. 17380 ELSE IF VIL_W0%=2 THEN
  1214. 17385 VIL_W2%=VIL_WIN_X%+VIL_VWM_XL%+(VIL_WIN_LB%+VIL_WIN_RB%-1)-VIL_MX%
  1215. 17390 VIL_W2%=VIL_MX%-VIL_W2%*(VIL_W2%>0)
  1216. 17395 VIL_WIN_W%=VIL_W2%-(VIL_W2%-VIL_WIN_W%)MOD VIL_VWM_WD%
  1217. 17400 ENDIF
  1218. 17405 ENDIF
  1219. 17410 IF VIL_MY%<=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%THEN
  1220. 17415 VIL_WIN_Y%=VIL_MY%+(VIL_WIN_Y%-VIL_MY%)MOD VIL_VWM_ZD%
  1221. 17420 VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%:VIL_W1%=1
  1222. 17425 ELSE IF VIL_MY%>=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%THEN
  1223. 17430 VIL_WIN_Z%=VIL_MY%-(VIL_MY%-VIL_WIN_Z%)MOD VIL_VWM_ZD%
  1224. 17435 VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%:VIL_W1%=2
  1225. 17440 ELSE
  1226. 17445 IF VIL_W1%=1 THEN
  1227. 17450 VIL_W2%=VIL_WIN_Z%-VIL_VWM_YL%-(VIL_WIN_UB%+VIL_WIN_DB%-1)-VIL_MY%
  1228. 17455 VIL_W2%=VIL_MY%-VIL_W2%*(VIL_W2%<0)
  1229. 17460 VIL_WIN_Y%=VIL_W2%+(VIL_WIN_Y%-VIL_W2%)MOD VIL_VWM_ZD
  1230. 17465 ELSE IF VIL_W1%=2 THEN
  1231. 17470 VIL_W2%=VIL_WIN_Y%+VIL_VWM_YL%+(VIL_WIN_UB%+VIL_WIN_DB%-1)-VIL_MY%
  1232. 17475 VIL_W2%=VIL_MY%-VIL_W2%*(VIL_W2%>0)
  1233. 17480 VIL_WIN_Z%=VIL_W2%-(VIL_W2%-VIL_WIN_Z%)MOD VIL_VWM_ZD%
  1234. 17485 ENDIF
  1235. 17490 ENDIF
  1236. 17495 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  1237. 17500 ENDIF
  1238. 17505 WEND
  1239. 17510 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  1240. 17515 IF MOUSE(2,1)THEN
  1241. 17520 VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
  1242. 17525 VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
  1243. 17530 VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)
  1244. 17535 VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
  1245. 17540 ELSE
  1246. 17545 VIL_WIN_X%=VIL_WIN_X%+VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%+VIL_WIN_UB%
  1247. 17550 VIL_WIN_W%=VIL_WIN_W%-VIL_WIN_RB%:VIL_WIN_Z%=VIL_WIN_Z%-VIL_WIN_DB%
  1248. 17555 GOSUB*VIL_VWM_RS
  1249. 17560 ENDIF
  1250. 17565 MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
  1251. 17570 MOUSE 4,0,0,639,479
  1252. 17575 IF VIL_VWM_PMB%THEN GOSUB*VIL_WIN_PMR
  1253. 17580 RETURN
  1254. 17585 *VIL_VWM_KRESIZE
  1255. 17590 WHILE INKEY$<>"":WEND
  1256. 17595 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB*VIL_WIN_PMA
  1257. 17600 VIL_W2%=VIL_WIN_W%-VIL_VWM_WL%-VIL_VWM_XM%+1
  1258. 17605 VIL_W3%=VIL_WIN_Z%-VIL_VWM_ZL%-VIL_VWM_YM%+1
  1259. 17610 VIL_W4%=VIL_WIN_X%+VIL_VWM_WL%-VIL_VWM_WM%-1
  1260. 17615 VIL_W5%=VIL_WIN_Y%+VIL_VWM_ZL%-VIL_VWM_ZM%-1
  1261. 17620 VIL_W2%=VIL_VWM_XM%-VIL_W2%*(VIL_W2%>0)
  1262. 17625 VIL_W3%=VIL_VWM_YM%-VIL_W3%*(VIL_W3%>0)
  1263. 17630 VIL_W4%=VIL_VWM_WM%-VIL_W4%*(VIL_W4%<0)
  1264. 17635 VIL_W5%=VIL_VWM_ZM%-VIL_W5%*(VIL_W5%<0)
  1265. 17640 VIL_WIN_X%=VIL_WIN_X%-VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%-VIL_WIN_UB%:VIL_WIN_W%=VIL_WIN_W%+VIL_WIN_RB%:VIL_WIN_Z%=VIL_WIN_Z%+VIL_WIN_DB%
  1266. 17645 VIL_W0%=2:VIL_W1%=1
  1267. 17650 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  1268. 17655 VIL_VKEY_KY%=0
  1269. 17660 WHILE VIL_VKEY_KY%<>-1 AND VIL_VKEY_KY%<>-2
  1270. 17665 *VIL_VWM_KMOVE_W1
  1271. 17670 GOSUB*VIL_VKEY_KY
  1272. 17675 IF VIL_VKEY_KY%=-4 THEN*VIL_VWM_KMOVE_W1
  1273. 17680 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  1274. 17685 VIL_W6%=((VIL_VKEY_KY%=-6)-(VIL_VKEY_KY%=-5))*VIL_VWM_WD%+((VIL_VKEY_KY%=-10)-(VIL_VKEY_KY%=-9))*VIL_VWM_WD%*8
  1275. 17690 IF VIL_W0%=1 THEN
  1276. 17695 VIL_WIN_X%=VIL_WIN_X%+VIL_W6%
  1277. 17700 IF VIL_WIN_X%<VIL_W2%THEN
  1278. 17705 VIL_WIN_W%=VIL_W4%-(VIL_W4%-VIL_WIN_W%)MOD VIL_VWM_WD%
  1279. 17710 VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:VIL_W0%=2
  1280. 17715 ELSE IF VIL_WIN_W%-VIL_VWM_XL%-(VIL_WIN_LB%+VIL_WIN_RB%-1)<VIL_WIN_X%THEN
  1281. 17720 VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:VIL_W0%=2
  1282. 17725 VIL_WIN_W%=VIL_WIN_X%+VIL_VWM_XL%+(VIL_WIN_LB%+VIL_WIN_RB%-1)+(VIL_WIN_W%-VIL_WIN_X%-VIL_VWM_XL%-(VIL_WIN_LB%+VIL_WIN_RB%-1))MOD VIL_VWM_WD%
  1283. 17730 ENDIF
  1284. 17735 ELSE
  1285. 17740 VIL_WIN_W%=VIL_WIN_W%+VIL_W6%
  1286. 17745 IF VIL_WIN_W%<VIL_WIN_X%+VIL_VWM_XL%+(VIL_WIN_LB%+VIL_WIN_RB%-1)THEN
  1287. 17750 VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)+8:VIL_W0%=1
  1288. 17755 VIL_WIN_X%=VIL_WIN_W%-VIL_VWM_XL%-(VIL_WIN_LB%+VIL_WIN_RB%-1)+(VIL_WIN_X%-VIL_WIN_W%+VIL_VWM_XL%+(VIL_WIN_LB%+VIL_WIN_RB%-1))MOD VIL_VWM_WD%
  1289. 17760 ELSE IF VIL_W4%<VIL_WIN_W%THEN
  1290. 17765 VIL_WIN_X%=VIL_W2%-(VIL_W2%-VIL_WIN_X%)MOD VIL_VWM_WD%
  1291. 17770 VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%:VIL_W0%=1
  1292. 17775 ENDIF
  1293. 17780 ENDIF
  1294. 17785 VIL_W6%=((VIL_VKEY_KY%=-7)-(VIL_VKEY_KY%=-8))*VIL_VWM_ZD%+((VIL_VKEY_KY%=-11)-(VIL_VKEY_KY%=-12))*VIL_VWM_ZD%*8
  1295. 17790 IF VIL_W1%=1 THEN
  1296. 17795 VIL_WIN_Y%=VIL_WIN_Y%+VIL_W6%
  1297. 17800 IF VIL_WIN_Y%<VIL_W3%THEN
  1298. 17805 VIL_WIN_Z%=VIL_W5%-(VIL_W5%-VIL_WIN_Z%)MOD VIL_VWM_ZD%
  1299. 17810 VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%:VIL_W1%=2
  1300. 17815 ELSE IF VIL_WIN_Z%-VIL_VWM_YL%-(VIL_WIN_UB%+VIL_WIN_DB%-1)<VIL_WIN_Y%THEN
  1301. 17820 VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%:VIL_W1%=2
  1302. 17825 VIL_WIN_Z%=VIL_WIN_Y%+VIL_VWM_YL%+(VIL_WIN_UB%+VIL_WIN_DB%-1)+(VIL_WIN_Z%-VIL_WIN_Y%-VIL_VWM_YL%-(VIL_WIN_UB%+VIL_WIN_DB%-1))MOD VIL_VWM_ZD%
  1303. 17830 ENDIF
  1304. 17835 ELSE
  1305. 17840 VIL_WIN_Z%=VIL_WIN_Z%+VIL_W6%
  1306. 17845 IF VIL_WIN_Z%<VIL_WIN_Y%+VIL_VWM_YL%+(VIL_WIN_UB%+VIL_WIN_DB%-1)THEN
  1307. 17850 VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%:VIL_W1%=1
  1308. 17855 VIL_WIN_Y%=VIL_WIN_Z%-VIL_VWM_YL%-(VIL_WIN_UB%+VIL_WIN_DB%-1)+(VIL_WIN_Y%-VIL_WIN_Z%+VIL_VWM_YL%+(VIL_WIN_UB%+VIL_WIN_DB%-1))MOD VIL_VWM_ZD%
  1309. 17860 ELSE IF VIL_W5%<VIL_WIN_Z%THEN
  1310. 17865 VIL_WIN_Y%=VIL_W3%-(VIL_W3%-VIL_WIN_Y%)MOD VIL_VWM_ZD%
  1311. 17870 VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%:VIL_W1%=1
  1312. 17875 ENDIF
  1313. 17880 ENDIF
  1314. 17885 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  1315. 17890 WEND
  1316. 17895 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  1317. 17900 IF VIL_VKEY_KY%=-2 THEN
  1318. 17905 VIL_WIN_X%=VIL_WIN_X%+VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%+VIL_WIN_UB%
  1319. 17910 VIL_WIN_W%=VIL_WIN_W%-VIL_WIN_RB%:VIL_WIN_Z%=VIL_WIN_Z%-VIL_WIN_DB%
  1320. 17915 GOSUB*VIL_VWM_RS
  1321. 17920 ELSE
  1322. 17925 VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
  1323. 17930 VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
  1324. 17935 VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)
  1325. 17940 VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
  1326. 17945 ENDIF
  1327. 17950 IF VIL_VWM_PMB%THEN GOSUB*VIL_WIN_PMR
  1328. 17955 RETURN
  1329. 17960 *VIL_VWM_RS
  1330. 17965 VIL_WIN_BFO&(VIL_WIN_AN%+1)=VIL_WIN_BFO&(VIL_WIN_AN%)+INT((INT((VIL_WIN_W%-VIL_WIN_X%+24)/8)*(VIL_WIN_Z%-VIL_WIN_Y%+23)*4+1)/2)
  1331. 17970 IF VIL_WIN_BFO&(VIL_WIN_AN%+1)<VIL_WIN_BFO&(VIL_WIN_AN%)THEN
  1332. 17975 VIL_WIN_BFO&(VIL_WIN_AN%+1)=VIL_WIN_BFO&(VIL_WIN_AN%)
  1333. 17980 ENDIF
  1334. 17985 VIL_E%=0
  1335. 17990 GET@A(VIL_WIN_X%(VIL_WIN_AN%),VIL_WIN_Y%(VIL_WIN_AN%))-(VIL_WIN_W%(VIL_WIN_AN%),VIL_WIN_Z%(VIL_WIN_AN%)),VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%+1)
  1336. 17995 VIL_VWM_WX%=VIL_WIN_W%(VIL_WIN_AN%)-VIL_WIN_X%(VIL_WIN_AN%)
  1337. 18000 VIL_VWM_WY%=VIL_WIN_Z%(VIL_WIN_AN%)-VIL_WIN_Y%(VIL_WIN_AN%)
  1338. 18005 IF VIL_E%=0 THEN
  1339. 18010 VIL_WIN_X%(VIL_WIN_AN%+1)=VIL_WIN_X%
  1340. 18015 VIL_WIN_Y%(VIL_WIN_AN%+1)=VIL_WIN_Y%
  1341. 18020 VIL_WIN_W%(VIL_WIN_AN%+1)=VIL_WIN_W%
  1342. 18025 VIL_WIN_Z%(VIL_WIN_AN%+1)=VIL_WIN_Z%
  1343. 18030 GOSUB*VIL_VWM_CL
  1344. 18035 IF VIL_VWM_N%THEN
  1345. 18040 VIL_VWM_X%(VIL_VWM_N%)=VIL_WIN_X%(VIL_WIN_AN%+2)
  1346. 18045 VIL_VWM_Y%(VIL_VWM_N%)=VIL_WIN_Y%(VIL_WIN_AN%+2)
  1347. 18050 VIL_VWM_W%(VIL_VWM_N%)=VIL_WIN_W%(VIL_WIN_AN%+2)
  1348. 18055 VIL_VWM_Z%(VIL_VWM_N%)=VIL_WIN_Z%(VIL_WIN_AN%+2)
  1349. 18060 ELSE
  1350. 18065 VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%+2)
  1351. 18070 VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%+2)
  1352. 18075 VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%+2)
  1353. 18080 VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%+2)
  1354. 18085 ENDIF
  1355. 18090 VIL_VWM_AT%=VIL_VWM_AT%(VIL_WIN_AN%+1)
  1356. 18095 VIL_VWM_T$=VIL_VWM_T$(VIL_WIN_AN%+1)
  1357. 18100 GOSUB*VIL_VWM_OP
  1358. 18105 GOSUB*VIL_WIN_PMR
  1359. 18110 PUT@A(0,0)-(VIL_VWM_WX%,VIL_VWM_WY%),VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%+1)
  1360. 18115 GOSUB*VIL_WIN_PMA
  1361. 18120 VIL_VWM_R%=16
  1362. 18125 ELSE
  1363. 18130 VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
  1364. 18135 VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
  1365. 18140 VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)
  1366. 18145 VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
  1367. 18150 VIL_VWM_R%=0
  1368. 18155 ENDIF
  1369. 18160 RETURN
  1370. 18165 *VIL_VWM_XSCRLBAR
  1371. 18170 VIL_SBAR_Y%=VIL_WIN_Z%+3
  1372. 18175 VIL_SBAR_X%=VIL_WIN_X%:VIL_SBAR_W%=VIL_WIN_W%
  1373. 18180 VIL_SBAR_LBL%=VIL_VWM_XLBL%:VIL_SBAR_LIL%=VIL_VWM_XLIL%
  1374. 18185 VIL_SBAR_LIP%=VIL_VWM_XLIP%:VIL_SBAR_LPL%=VIL_VWM_XLPL%
  1375. 18190 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB*VIL_WIN_PMA
  1376. 18195 GOSUB*VIL_SBAR_XOP
  1377. 18200 IF VIL_VWM_PMB%THEN GOSUB*VIL_WIN_PMR
  1378. 18205 VIL_VWM_XLIP%=VIL_SBAR_LIP%
  1379. 18210 IF VIL_SBAR_R%THEN VIL_VWM_R%=4096
  1380. 18215 RETURN
  1381. 18220 *VIL_VWM_YSCRLBAR
  1382. 18225 VIL_SBAR_X%=VIL_WIN_W%+3
  1383. 18230 VIL_SBAR_Y%=VIL_WIN_Y%:VIL_SBAR_Z%=VIL_WIN_Z%
  1384. 18235 VIL_SBAR_LBL%=VIL_VWM_YLBL%:VIL_SBAR_LIL%=VIL_VWM_YLIL%
  1385. 18240 VIL_SBAR_LIP%=VIL_VWM_YLIP%:VIL_SBAR_LPL%=VIL_VWM_YLPL%
  1386. 18245 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB*VIL_WIN_PMA
  1387. 18250 GOSUB*VIL_SBAR_YOP
  1388. 18255 IF VIL_VWM_PMB%THEN GOSUB*VIL_WIN_PMR
  1389. 18260 VIL_VWM_YLIP%=VIL_SBAR_LIP%
  1390. 18265 IF VIL_SBAR_R%THEN VIL_VWM_R%=8192
  1391. 18270 RETURN
  1392. 18275 *VIL_SBAR_INITM
  1393. 18280 IF VIL_E%=0 THEN
  1394. 18285 VIL_SBAR_X%=0:VIL_SBAR_W%=0:VIL_SBAR_Y%=0:VIL_SBAR_Z%=0
  1395. 18290 VIL_SBAR_IX%=0:VIL_SBAR_IW%=0:VIL_SBAR_IY%=0:VIL_SBAR_IZ%=0
  1396. 18295 VIL_SBAR_LBL%=0:VIL_SBAR_LIL%=0:VIL_SBAR_LIP%=0:VIL_SBAR_LPL%=0
  1397. 18300 VIL_SBAR_R%=0
  1398. 18305 ENDIF
  1399. 18310 RETURN
  1400. 18315 *VIL_SBAR_ENVR
  1401. 18320 VIL_W0$="":WHILE VIL_W0$<>"#SBAR":GOSUB*VIL_LNR:WEND
  1402. 18325 RETURN
  1403. 18330 *VIL_SBAR_ENVW
  1404. 18335 PRINT#1,"#SBAR"
  1405. 18340 RETURN
  1406. 18345 *VIL_SBAR_XOP
  1407. 18350 VIL_SBAR_R%=0
  1408. 18355 VIL_SBAR_IX%=VIL_SBAR_X%+12+(VIL_SBAR_LIP%)*(VIL_SBAR_W%-VIL_SBAR_X%-24)/VIL_SBAR_LBL%
  1409. 18360 VIL_SBAR_IW%=VIL_SBAR_IX%+VIL_SBAR_LIL%*(VIL_SBAR_W%-VIL_SBAR_X%-24)/VIL_SBAR_LBL%
  1410. 18365 IF VIL_MX%<VIL_SBAR_X%+13 THEN
  1411. 18370 IF VIL_SBAR_LIP%>0 THEN GOSUB*VIL_SBAR_XIERASE:VIL_SBAR_LIP%=VIL_SBAR_LIP%-1:GOSUB*VIL_SBAR_XIDRAW:VIL_SBAR_R%=1
  1412. 18375 ELSE IF VIL_MX%<VIL_SBAR_IX%THEN
  1413. 18380 GOSUB*VIL_SBAR_XIERASE:VIL_SBAR_LIP%=VIL_SBAR_LIP%-VIL_SBAR_LPL%
  1414. 18385 IF VIL_SBAR_LIP%<0 THEN VIL_SBAR_LIP%=0
  1415. 18390 GOSUB*VIL_SBAR_XIDRAW:VIL_SBAR_R%=2
  1416. 18395 ELSE IF VIL_MX%<VIL_SBAR_IW%THEN
  1417. 18400 MOUSE 2,VIL_VWM_MCA1$,VIL_VWM_MCD1$,VIL_VWM_MCX1%,VIL_VWM_MCY1%
  1418. 18405 MOUSE 1,VIL_MX%,VIL_MY%,1
  1419. 18410 MOUSE 4,VIL_SBAR_X%+12+(VIL_MX%-VIL_SBAR_IX%),VIL_SBAR_Y%,VIL_SBAR_W%-12+(VIL_MX%-VIL_SBAR_IW%),VIL_SBAR_Y%+12
  1420. 18415 VIL_W0%=VIL_SBAR_LIP%:VIL_W1%=VIL_MX%-VIL_SBAR_IX%
  1421. 18420 WHILE MOUSE(2,0)
  1422. 18425 VIL_MX%=MOUSE(9)
  1423. 18430 IF VIL_MX%THEN
  1424. 18435 VIL_MX%=MOUSE(0)
  1425. 18440 GOSUB*VIL_SBAR_XIERASE
  1426. 18445 VIL_SBAR_LIP%=(VIL_MX%-VIL_W1%-VIL_SBAR_X%-12)*VIL_SBAR_LBL%/(VIL_SBAR_W%-VIL_SBAR_X%-24)
  1427. 18450 GOSUB*VIL_SBAR_XIDRAW
  1428. 18455 ENDIF
  1429. 18460 WEND
  1430. 18465 IF MOUSE(2,1)THEN
  1431. 18470 GOSUB*VIL_SBAR_XIERASE:VIL_SBAR_LIP%=VIL_W0%:GOSUB*VIL_SBAR_XIDRAW
  1432. 18475 ELSE
  1433. 18480 VIL_SBAR_R%=4
  1434. 18485 ENDIF
  1435. 18490 MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
  1436. 18495 MOUSE 4,0,0,639,479
  1437. 18500 ELSE IF VIL_MX%<VIL_SBAR_W%-13 THEN
  1438. 18505 GOSUB*VIL_SBAR_XIERASE:VIL_SBAR_LIP%=VIL_SBAR_LIP%+VIL_SBAR_LPL%
  1439. 18510 IF VIL_SBAR_LIP%>VIL_SBAR_LBL%-VIL_SBAR_LIL%THEN VIL_SBAR_LIP%=VIL_SBAR_LBL%-VIL_SBAR_LIL%
  1440. 18515 GOSUB*VIL_SBAR_XIDRAW:VIL_SBAR_R%=4
  1441. 18520 ELSE
  1442. 18525 IF VIL_SBAR_LIP%+VIL_SBAR_LIL%<VIL_SBAR_LBL%THEN GOSUB*VIL_SBAR_XIERASE:VIL_SBAR_LIP%=VIL_SBAR_LIP%+1:GOSUB*VIL_SBAR_XIDRAW:VIL_SBAR_R%=5
  1443. 18530 ENDIF
  1444. 18535 RETURN
  1445. 18540 *VIL_SBAR_YOP
  1446. 18545 VIL_SBAR_R%=0
  1447. 18550 VIL_SBAR_IY%=VIL_SBAR_Y%+12+(VIL_SBAR_LIP%)*(VIL_SBAR_Z%-VIL_SBAR_Y%-24)/VIL_SBAR_LBL%
  1448. 18555 VIL_SBAR_IZ%=VIL_SBAR_IY%+VIL_SBAR_LIL%*(VIL_SBAR_Z%-VIL_SBAR_Y%-24)/VIL_SBAR_LBL%
  1449. 18560 IF VIL_MY%<VIL_SBAR_Y%+13 THEN
  1450. 18565 IF VIL_SBAR_LIP%>0 THEN GOSUB*VIL_SBAR_YIERASE:VIL_SBAR_LIP%=VIL_SBAR_LIP%-1:GOSUB*VIL_SBAR_YIDRAW:VIL_SBAR_R%=1
  1451. 18570 ELSE IF VIL_MY%<VIL_SBAR_IY%THEN
  1452. 18575 GOSUB*VIL_SBAR_YIERASE:VIL_SBAR_LIP%=VIL_SBAR_LIP%-VIL_SBAR_LPL%
  1453. 18580 IF VIL_SBAR_LIP%<0 THEN VIL_SBAR_LIP%=0
  1454. 18585 GOSUB*VIL_SBAR_YIDRAW:VIL_SBAR_R%=2
  1455. 18590 ELSE IF VIL_MY%<VIL_SBAR_IZ%THEN
  1456. 18595 MOUSE 2,VIL_VWM_MCA1$,VIL_VWM_MCD1$,VIL_VWM_MCX1%,VIL_VWM_MCY1%
  1457. 18600 MOUSE 1,VIL_MX%,VIL_MY%,1
  1458. 18605 MOUSE 4,VIL_SBAR_X%,VIL_SBAR_Y%+12+(VIL_MY%-VIL_SBAR_IY%),VIL_SBAR_X%+12,VIL_SBAR_Z%-12+(VIL_MY%-VIL_SBAR_IZ%)
  1459. 18610 VIL_W0%=VIL_SBAR_LIP%:VIL_W1%=VIL_MY%-VIL_SBAR_IY%
  1460. 18615 WHILE MOUSE(2,0)
  1461. 18620 VIL_MY%=MOUSE(10)
  1462. 18625 IF VIL_MY%THEN
  1463. 18630 VIL_MY%=MOUSE(1)
  1464. 18635 GOSUB*VIL_SBAR_YIERASE
  1465. 18640 VIL_SBAR_LIP%=(VIL_MY%-VIL_W1%-VIL_SBAR_Y%-12)*VIL_SBAR_LBL%/(VIL_SBAR_Z%-VIL_SBAR_Y%-24)
  1466. 18645 GOSUB*VIL_SBAR_YIDRAW
  1467. 18650 ENDIF
  1468. 18655 WEND
  1469. 18660 IF MOUSE(2,1)THEN
  1470. 18665 GOSUB*VIL_SBAR_YIERASE:VIL_SBAR_LIP%=VIL_W0%:GOSUB*VIL_SBAR_YIDRAW
  1471. 18670 ELSE
  1472. 18675 VIL_SBAR_R%=4
  1473. 18680 ENDIF
  1474. 18685 MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
  1475. 18690 MOUSE 4,0,0,639,479
  1476. 18695 ELSE IF VIL_MY%<VIL_SBAR_Z%-13 THEN
  1477. 18700 GOSUB*VIL_SBAR_YIERASE:VIL_SBAR_LIP%=VIL_SBAR_LIP%+VIL_SBAR_LPL%
  1478. 18705 IF VIL_SBAR_LIP%>VIL_SBAR_LBL%-VIL_SBAR_LIL%THEN VIL_SBAR_LIP%=VIL_SBAR_LBL%-VIL_SBAR_LIL%
  1479. 18710 GOSUB*VIL_SBAR_YIDRAW:VIL_SBAR_R%=4
  1480. 18715 ELSE
  1481. 18720 IF VIL_SBAR_LIP%+VIL_SBAR_LIL%<VIL_SBAR_LBL%THEN GOSUB*VIL_SBAR_YIERASE:VIL_SBAR_LIP%=VIL_SBAR_LIP%+1:GOSUB*VIL_SBAR_YIDRAW:VIL_SBAR_R%=5
  1482. 18725 ENDIF
  1483. 18730 RETURN
  1484. 18735 *VIL_SBAR_XDRAW
  1485. 18740 LINE(VIL_SBAR_X%,VIL_SBAR_Y%)-(VIL_SBAR_W%,VIL_SBAR_Y%+10),PSET,%2,BF
  1486. 18745 CONNECT(VIL_SBAR_X%+11,VIL_SBAR_Y%+10)-(VIL_SBAR_W%-11,VIL_SBAR_Y%+10)-(VIL_SBAR_W%-11,VIL_SBAR_Y%),%3
  1487. 18750 CONNECT(VIL_SBAR_X%+11,VIL_SBAR_Y%+9)-(VIL_SBAR_X%+11,VIL_SBAR_Y%)-(VIL_SBAR_W%-12,VIL_SBAR_Y%),%1
  1488. 18755 GOSUB*VIL_SBAR_XIDRAW
  1489. 18760 RETURN
  1490. 18765 *VIL_SBAR_YDRAW
  1491. 18770 LINE(VIL_SBAR_X%,VIL_SBAR_Y%)-(VIL_SBAR_X%+10,VIL_SBAR_Z%),PSET,%2,BF
  1492. 18775 CONNECT(VIL_SBAR_X%,VIL_SBAR_Z%-11)-(VIL_SBAR_X%+10,VIL_SBAR_Z%-11)-(VIL_SBAR_X%+10,VIL_SBAR_Y%+11),%3
  1493. 18780 CONNECT(VIL_SBAR_X%,VIL_SBAR_Z%-12)-(VIL_SBAR_X%,VIL_SBAR_Y%+11)-(VIL_SBAR_X%+9,VIL_SBAR_Y%+11),%1
  1494. 18785 GOSUB*VIL_SBAR_YIDRAW
  1495. 18790 RETURN
  1496. 18795 *VIL_SBAR_XIDRAW
  1497. 18800 VIL_SBAR_IX%=VIL_SBAR_X%+12+(VIL_SBAR_LIP%)*(VIL_SBAR_W%-VIL_SBAR_X%-24)/VIL_SBAR_LBL%
  1498. 18805 VIL_SBAR_IW%=VIL_SBAR_IX%+VIL_SBAR_LIL%*(VIL_SBAR_W%-VIL_SBAR_X%-24)/VIL_SBAR_LBL%
  1499. 18810 CONNECT(VIL_SBAR_IX%,VIL_SBAR_Y%+9)-(VIL_SBAR_IX%,VIL_SBAR_Y%+1)-(VIL_SBAR_IW%,VIL_SBAR_Y%+1),%3
  1500. 18815 CONNECT(VIL_SBAR_IX%+1,VIL_SBAR_Y%+9)-(VIL_SBAR_IW%,VIL_SBAR_Y%+9)-(VIL_SBAR_IW%,VIL_SBAR_Y%+2),%1
  1501. 18820 RETURN
  1502. 18825 *VIL_SBAR_YIDRAW
  1503. 18830 VIL_SBAR_IY%=VIL_SBAR_Y%+12+(VIL_SBAR_LIP%)*(VIL_SBAR_Z%-VIL_SBAR_Y%-24)/VIL_SBAR_LBL%
  1504. 18835 VIL_SBAR_IZ%=VIL_SBAR_IY%+VIL_SBAR_LIL%*(VIL_SBAR_Z%-VIL_SBAR_Y%-24)/VIL_SBAR_LBL%
  1505. 18840 CONNECT(VIL_SBAR_X%+1,VIL_SBAR_IZ%)-(VIL_SBAR_X%+1,VIL_SBAR_IY%)-(VIL_SBAR_X%+9,VIL_SBAR_IY%),%3
  1506. 18845 CONNECT(VIL_SBAR_X%+2,VIL_SBAR_IZ%)-(VIL_SBAR_X%+9,VIL_SBAR_IZ%)-(VIL_SBAR_X%+9,VIL_SBAR_IY%+1),%1
  1507. 18850 RETURN
  1508. 18855 *VIL_SBAR_XIERASE
  1509. 18860 VIL_SBAR_IX%=VIL_SBAR_X%+12+(VIL_SBAR_LIP%)*(VIL_SBAR_W%-VIL_SBAR_X%-24)/VIL_SBAR_LBL%
  1510. 18865 VIL_SBAR_IW%=VIL_SBAR_IX%+VIL_SBAR_LIL%*(VIL_SBAR_W%-VIL_SBAR_X%-24)/VIL_SBAR_LBL%
  1511. 18870 LINE(VIL_SBAR_IX%,VIL_SBAR_Y%+1)-(VIL_SBAR_IW%,VIL_SBAR_Y%+9),PSET,%2,BF
  1512. 18875 RETURN
  1513. 18880 *VIL_SBAR_YIERASE
  1514. 18885 VIL_SBAR_IY%=VIL_SBAR_Y%+12+(VIL_SBAR_LIP%)*(VIL_SBAR_Z%-VIL_SBAR_Y%-24)/VIL_SBAR_LBL%
  1515. 18890 VIL_SBAR_IZ%=VIL_SBAR_IY%+VIL_SBAR_LIL%*(VIL_SBAR_Z%-VIL_SBAR_Y%-24)/VIL_SBAR_LBL%
  1516. 18895 LINE(VIL_SBAR_X%+1,VIL_SBAR_IY%)-(VIL_SBAR_X%+9,VIL_SBAR_IZ%),PSET,%2,BF
  1517. 18900 RETURN
  1518. 18905 *VIL_SEL_INITM
  1519. 18910 RETURN
  1520. 18915 *VIL_SEL_ENVR
  1521. 18920 VIL_W0$="":WHILE VIL_W0$<>"#SEL":GOSUB*VIL_LNR:WEND
  1522. 18925 RETURN
  1523. 18930 *VIL_SEL_ENVW
  1524. 18935 PRINT#1,"#SEL"
  1525. 18940 RETURN
  1526. 18945 *VIL_SEL_OK
  1527. 18950 SYMBOL(VIL_X%+4,VIL_Y%+4),"確認",1,1,7
  1528. 18955 LINE(VIL_X%+2,VIL_Y%+2)-(VIL_X%+37,VIL_Y%+21),PSET,7,B
  1529. 18960 VIL_W%=VIL_X%+39:VIL_Z%=VIL_Y%+23
  1530. 18965 VIL_XN%=1:VIL_YN%=1:VIL_C%=15:VIL_MSEL_MN%=0:VIL_MSEL_BC%=0
  1531. 18970 VIL_MSEL_BB%=1:VIL_MSEL_BE%=1
  1532. 18975 GOSUB*VIL_MSEL_M
  1533. 18980 GOSUB*VIL_MSEL_BC
  1534. 18985 RETURN
  1535. 18990 *VIL_SEL_YN
  1536. 18995 SYMBOL(VIL_X%+4,VIL_Y%+4),"はい    いいえ",1,1,7
  1537. 19000 LINE(VIL_X%+2,VIL_Y%+2)-(VIL_X%+53,VIL_Y%+21),PSET,7,B
  1538. 19005 LINE(VIL_X%+66,VIL_Y%+2)-(VIL_X%+117,VIL_Y%+21),PSET,7,B
  1539. 19010 VIL_W%=VIL_X%+55:VIL_Z%=VIL_Y%+23
  1540. 19015 VIL_XL%=64:VIL_XN%=2:VIL_YN%=1:VIL_C%=15:VIL_MSEL_BD%=0
  1541. 19020 VIL_MSEL_MN%=0:VIL_MSEL_BC%=0:VIL_MSEL_BB%=1:VIL_MSEL_BE%=2
  1542. 19025 GOSUB*VIL_MSEL_M
  1543. 19030 GOSUB*VIL_MSEL_BC
  1544. 19035 IF VIL_KN%=-1 THEN VIL_KN%=2
  1545. 19040 RETURN
  1546. 19045 *VIL_SEL_DO
  1547. 19050 SYMBOL(VIL_X%+4,VIL_Y%+4),"実行  取消",1,1,7
  1548. 19055 LINE(VIL_X%+2,VIL_Y%+2)-(VIL_X%+37,VIL_Y%+21),PSET,7,B
  1549. 19060 LINE(VIL_X%+50,VIL_Y%+2)-(VIL_X%+85,VIL_Y%+21),PSET,7,B
  1550. 19065 VIL_W%=VIL_X%+39:VIL_Z%=VIL_Y%+23
  1551. 19070 VIL_XL%=48:VIL_XN%=2:VIL_YN%=1:VIL_C%=15:VIL_MSEL_BD%=0
  1552. 19075 VIL_MSEL_MN%=0:VIL_MSEL_BC%=0:VIL_MSEL_BB%=1:VIL_MSEL_BE%=2
  1553. 19080 GOSUB*VIL_MSEL_M
  1554. 19085 GOSUB*VIL_MSEL_BC
  1555. 19090 IF VIL_KN%=-1 THEN VIL_KN%=2
  1556. 19095 RETURN
  1557. 20000 '
  1558. 20010 '<<<<<<<<<<<<<<<  Visual Interface Library Demo V3.10  >>>>>>>>>>>>>>>
  1559. 20020 '
  1560. 20030 *MAIN       'VILは最初にこのラベルを呼び出す
  1561. 20040 '
  1562. 20050 RANDOMIZE TIME:DEFINT A-Z
  1563. 20060 '
  1564. 20070 'SCREEN 1,0,3,1:VIEW(0,0)-(639,479):WINDOW(0,0)-(639,479)
  1565. 20080 VIEW(0,0)-(639,479):WINDOW(0,0)-(639,479)
  1566. 20090 PALETTE@:CLS
  1567. 20100 PLAY OFF
  1568. 20110 '
  1569. 20120 '起動画面
  1570. 20130 '
  1571. 20140 SCREEN 0:CLS
  1572. 20150 LINE(160,160)-(479,319),PSET,7,BF
  1573. 20160 SYMBOL(224,168),"VIL",4,4,4
  1574. 20170 SYMBOL(224,260),"Visual Interface Library",1,1,0
  1575. 20180 SYMBOL(224,280)," Demonstration  Program ",1,1,0
  1576. 20190 '
  1577. 20200 '<<<<<<<<<<<<<<<<<<<<  VIL INITIALIZE  >>>>>>>>>>>>>>>>>>>>
  1578. 20210 '
  1579. 20220 'VILパッケージ初期化
  1580. 20230 '
  1581. 20240 GOSUB *VIL_CNFOP
  1582. 20250 '
  1583. 20260 GOSUB *VIL_ENV_INITM
  1584. 20270 '
  1585. 20280 GOSUB *VIL_BEEP_INITM
  1586. 20290 '
  1587. 20300 VIL_W0&=1024*500\2            '画面退避(最大ウィンドウ総面積)
  1588. 20310 VIL_W1%=20                    '最大ウィンドウ番号
  1589. 20320 GOSUB *VIL_WIN_INITM
  1590. 20330 '
  1591. 20340 GOSUB *VIL_VKEY_INITM
  1592. 20350 '
  1593. 20360 VIL_W0%=120                   '最大メニュー番号
  1594. 20370 VIL_W1%=256                   '最大ボックス数
  1595. 20380 VIL_W2%=10                    '設定メニュー最大行数
  1596. 20390 GOSUB *VIL_MSEL_INITM
  1597. 20400 '
  1598. 20410 VIL_W0%=2                     'ヒストリ系列数
  1599. 20420 GOSUB *VIL_INP_INITM
  1600. 20430 '
  1601. 20440 VIL_W0&=100000                '画像データバッファ要素数
  1602. 20450 VIL_W1%=50                    '画像データインデックス要素数
  1603. 20460 VIL_W2&=100                   'パレットデータバッファ要素数
  1604. 20470 VIL_W3%=10                    'パレットデータインデックス要素数
  1605. 20480 GOSUB *VIL_MG_INITM
  1606. 20490 '
  1607. 20500 VIL_W0%=10                   '最大ウィンドウ通し番号
  1608. 20510 VIL_W1%=8                     'ウィンドウ背景色用パレット番号
  1609. 20520 VIL_W2%=0                     '枠幅パターン数
  1610. 20530 GOSUB *VIL_VWM_INITM
  1611. 20540 '
  1612. 20550 GOSUB *VIL_SBAR_INITM
  1613. 20560 '
  1614. 20570 GOSUB *VIL_SEL_INITM
  1615. 20580 '
  1616. 20590 IF VIL_E% THEN PRINT"VIL INIT ERROR!!":BEEP:STOP
  1617. 20600 GOSUB *VIL_CNFCL
  1618. 20610 '
  1619. 20620 'アプリ環境ファイル読み込み
  1620. 20630 '
  1621. 20640 GOSUB *VIL_ENV_ROP
  1622. 20650   GOSUB *VIL_BEEP_ENVR
  1623. 20660   GOSUB *VIL_WIN_ENVR
  1624. 20670   GOSUB *VIL_VKEY_ENVR
  1625. 20680   GOSUB *VIL_MSEL_ENVR
  1626. 20690   GOSUB *VIL_INP_ENVR
  1627. 20700   GOSUB *VIL_MG_ENVR
  1628. 20710   GOSUB *VIL_VWM_ENVR
  1629. 20720   GOSUB *VIL_SBAR_ENVR
  1630. 20730   GOSUB *VIL_SEL_ENVR
  1631. 20740 GOSUB *VIL_ENV_RCL
  1632. 20750 '
  1633. 20760 '<<<<<<<<<<<<<<<<<<<<  INIT  >>>>>>>>>>>>>>>>>>>>
  1634. 20770 DIM TXTBUF$(51)
  1635. 20780 RESTORE *TXT_DATA:FOR I=0 TO 51:READ TXTBUF$(I):NEXT
  1636. 20790 *TXT_DATA
  1637. 20800 DATA "     ~ スクロールバー ~     "
  1638. 20810 DATA " このウィンドウは縦方向のスクロールバー"
  1639. 20820 DATA "が付いています。                       "
  1640. 20830 DATA "              上スクロールスイッチ→┌┐"
  1641. 20840 DATA "                                   ├┤"
  1642. 20850 DATA "              リージョン────┬→││"
  1643. 20860 DATA "                               │  ├┤"
  1644. 20870 DATA "              インジケータ────→││"
  1645. 20880 DATA "                                │  ├┤"
  1646. 20890 DATA "                                └→││"
  1647. 20900 DATA "                                    ├┤"
  1648. 20910 DATA "              下スクロールスイッチ→└┘"
  1649. 20920 DATA " 下スクロールスイッチをクリックすると、"
  1650. 20930 DATA "この説明文の続きを読むことができます。最"
  1651. 20940 DATA "初の方を読みたいときは、上スクロールスイ"
  1652. 20950 DATA "ッチをクリックしてください。            "
  1653. 20960 DATA "                                       "
  1654. 20970 DATA " インジケータは、説明文全体のうちどの部"
  1655. 20980 DATA "分がウィンドウ内に表示されているかを示し"
  1656. 20990 DATA "ています。このインジケータをドラッグする"
  1657. 21000 DATA "ことで、任意の位置に一気に移動することが"
  1658. 21010 DATA "できます。                              "
  1659. 21020 DATA "                                       "
  1660. 21030 DATA " スクロールスイッチをクリックすると表示"
  1661. 21040 DATA "内容を一行ずつ進める/戻すことができます"
  1662. 21050 DATA "が、インジケータ上下のリージョンをクリッ"
  1663. 21060 DATA "クすると、一ページずつ進める/戻すことが"
  1664. 21070 DATA "できます。                              "
  1665. 21080 DATA "                                       "
  1666. 21090 DATA " この後では横方向のスクロールバーも登場"
  1667. 21100 DATA "しますが、操作方法は同様です。         "
  1668. 21110 DATA ""
  1669. 21120 DATA " この文章、ある程度長さがないとスクロー"
  1670. 21130 DATA "ルバーの例になりませんので、以下余談を書"
  1671. 21140 DATA "きます(^_^;)。なお、このウィンドウを抜け"
  1672. 21150 DATA "るときは、クローズスイッチを押してくださ"
  1673. 21160 DATA "い。"
  1674. 21170 DATA ""
  1675. 21180 DATA " このウィンドウマネージャ(WM)は一応"
  1676. 21190 DATA "VILの標準WMとして設計しています。で"
  1677. 21200 DATA "すから人によっては高機能すぎると思われる"
  1678. 21210 DATA "かもしれませんが、使わない属性は指定しな"
  1679. 21220 DATA "いようにすれば、アプリケーション側で対応"
  1680. 21230 DATA "ルーチンを書く必要もありません。        "
  1681. 21240 DATA ""
  1682. 21250 DATA "  例えばRPGを作るのなら、全てのウィン"
  1683. 21260 DATA "ドウで全属性OFFでも問題ないでしょう。"
  1684. 21270 DATA "個人的には MOVE 属性ぐらいは対応すると、"
  1685. 21280 DATA "コマンドウィンドウのレイアウトが自由にで"
  1686. 21290 DATA "きて楽しいと思いますが……(妙に具体的な"
  1687. 21300 DATA "例(^_^;)。フリコレ11にはなんとか(謎))。"
  1688. 21310 DATA ""
  1689. 21320 '
  1690. 21330 DIM SHTMAP(63,7)
  1691. 21340 RESTORE *SHTMAP_DATA
  1692. 21350 FOR Y=0 TO 7
  1693. 21360   READ A$
  1694. 21370   FOR X=0 TO 63
  1695. 21380     SHTMAP(X,Y)=VAL(MID$(A$,X+1,1))
  1696. 21390   NEXT
  1697. 21400 NEXT
  1698. 21410 '
  1699. 21420 *SHTMAP_DATA
  1700. 21430 DATA 0000000000000000004000000000000000000040040000000222222242222222
  1701. 21440 DATA 0000000000001322224222200001000000000040040000000000000040000000
  1702. 21450 DATA 0000000000000000004000000005000000100040040000000222222222222222
  1703. 21460 DATA 0000000013222222224000000004000001010222022000000000000012222222
  1704. 21470 DATA 0000000000000000004000010134000000100004000000000000000012222222
  1705. 21480 DATA 0001000000000000004000050004000000500002224200000222222222222222
  1706. 21490 DATA 0005000000000000004000042224000000400000004000000000000040000000
  1707. 21500 DATA 0004000000000000004000040004000000400000004000000222222242222222
  1708. 21510 '
  1709. 21520 VIL_MG_F$="VDEMO310":GOSUB *VIL_MG_LD
  1710. 21530 '
  1711. 21540 '<<<<<<<<<<<<<<<<<<<<  MAIN MENU  >>>>>>>>>>>>>>>>>>>>
  1712. 21550 *MAINMENU
  1713. 21560 'SCREEN 1,1:SCREEN@0:PALETTE@:CLS
  1714. 21570 'SCREEN 1,0:SCREEN@0:CLS
  1715. 21580 'MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
  1716. 21590 'ON ERROR GOTO 0'**********
  1717. 21600 'GOTO *APPLY' *VWM_XSCRLBAR_0
  1718. 21610 GOSUB *VIL_WIN_PMA
  1719. 21620 CLS:PALETTE 4,[100,0,150]
  1720. 21630 LINE(0,0)-(639,479),PSET,%4,BF
  1721. 21640 LINE(216,128)-(423,399),PRESET,,BF
  1722. 21650 SYMBOL(224,32),"Visual Interface Library",1,1,7
  1723. 21660 SYMBOL(272,64),"VIL",2,2,4,,,7
  1724. 21670 SYMBOL(192,104),"デモンストレ-ション  プログラム",1,1,4
  1725. 21680 RESTORE *MAINMENU_DATA
  1726. 21690 FOR Y=0 TO 3
  1727. 21700   READ A$
  1728. 21710   SYMBOL(232,Y*32+144),FNVIL_P2S$(Y+1)+" "+A$,1,1,7
  1729. 21720 NEXT
  1730. 21730 '
  1731. 21740 *MAINMENU_DATA
  1732. 21750 DATA "はじめに","基本パッケージ"
  1733. 21760 DATA "ウィンドウマネージャ","応用例"
  1734. 21770 '
  1735. 21780 VIL_X%=224:VIL_Y%=142:VIL_W%=VIL_X%+191:VIL_Z%=VIL_Y%+19
  1736. 21790 VIL_XN%=1:VIL_YN%=4:VIL_YL%=32:VIL_C%=15:VIL_CB%=0
  1737. 21800 VIL_MSEL_BB%=1:VIL_MSEL_BE%=4:VIL_MSEL_BD%=0:VIL_MSEL_BAM%=0:
  1738. 21810 VIL_MSEL_MN%=100:VIL_MSEL_BC%=0
  1739. 21820 GOSUB *VIL_MSEL_M
  1740. 21830 IF VIL_KN%>0 THEN ON VIL_KN% GOSUB *INTRO,*BAS,*VWM,*APPLY
  1741. 21840 GOTO *MAINMENU
  1742. 21850 '
  1743. 21860 '<<<<<<<<<<<<<<<<<<<<  はじめに  >>>>>>>>>>>>>>>>>>>>
  1744. 21870 *INTRO
  1745. 21880 CLS
  1746. 21890 VIL_WIN_X%=20:VIL_WIN_Y%=20:VIL_WIN_W%=VIL_WIN_X%+399:VIL_WIN_Z%=471
  1747. 21900 VIL_VWM_AT%=0:VIL_VWM_T$="INTRO"
  1748. 21910 GOSUB *VIL_VWM_OP
  1749. 21920 SYMBOL(8,  8),"         ~ はじめに ~       ",1,1,6
  1750. 21930 SYMBOL(8, 36)," VILはF-BASIC386上のプログラムで、",1,1,7
  1751. 21940 SYMBOL(8, 56),"マルチウィンドウ表示・マウス入力などのユーザ・イ",1,1,7
  1752. 21950 SYMBOL(8, 76),"ンタフェースを実現するサブルーチン集です。   ",1,1,7
  1753. 21960 SYMBOL(8, 96)," このデモンストレーション・プログラムでは、以下",1,1,7
  1754. 21970 SYMBOL(8,116),"の項目でその機能を説明します。         ",1,1,7
  1755. 21980 SYMBOL(8,136)," 2.基本パッケージ              ",1,1,7
  1756. 21990 SYMBOL(8,156),"  ウィンドウ、メニュー選択、文字列入力、      ",1,1,7
  1757. 22000 SYMBOL(8,176),"  マルチグラフィック表示           ",1,1,7
  1758. 22010 SYMBOL(8,196)," 3.ウィンドウマネージャ・パッケージ     ",1,1,7
  1759. 22020 SYMBOL(8,216),"  移動、サイズ変更、スクロールバー      ",1,1,7
  1760. 22030 SYMBOL(8,236)," 4.応用                   ",1,1,7
  1761. 22040 SYMBOL(8,256),"  各パッケージの組み合わせによる応用例    ",1,1,7
  1762. 22050 SYMBOL(8,436)," リターンキーかマウスの左ボタンを押してください ",1,1,6
  1763. 22060 WAIT 50
  1764. 22070 WHILE INKEY$<>CHR$(13) AND MOUSE(3,0)=0 AND MOUSE(2,0)=0:WEND
  1765. 22080 GOSUB *VIL_VWM_CL
  1766. 22090 RETURN
  1767. 22100 '
  1768. 22110 '<<<<<<<<<<<<<<<<<<<<  基本パッケージ  >>>>>>>>>>>>>>>>>>>>
  1769. 22120 *BAS
  1770. 22130 '
  1771. 22140 CLS'SCREEN 0:CLS
  1772. 22150 MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
  1773. 22160 LINE(0,0)-(639,479),PSET,4,BF
  1774. 22170 FOR I=0 TO 30
  1775. 22180   LINE(RND*639,RND*480)-(RND*639,RND*480),XOR,RND*6+1,BF
  1776. 22190 NEXT
  1777. 22200 '
  1778. 22210 VIL_WIN_X%=30:VIL_WIN_Y%=50
  1779. 22220 VIL_WIN_W%=VIL_WIN_X%+16*16+15:VIL_WIN_Z%=VIL_WIN_Y%+136+16+7
  1780. 22230 VIL_WIN_UB%=0:VIL_WIN_DB%=0:VIL_WIN_LB%=0:VIL_WIN_RB%=0
  1781. 22240 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP:GOSUB *VIL_WIN_PMR
  1782. 22250 CLS
  1783. 22260 SYMBOL(8,  8)," ~ VIL 基本パッケージ ~ ",1,1,6
  1784. 22270 SYMBOL(8, 36),"基本パッケージは以下のパッケージ",1,1,7
  1785. 22280 SYMBOL(8, 56),"から成っています。              ",1,1,7
  1786. 22290 SYMBOL(8, 76),"・ブザー音パッケージ            ",1,1,7
  1787. 22300 SYMBOL(8, 96),"・ウィンドウ・パッケージ        ",1,1,7
  1788. 22310 SYMBOL(8,116),"・メニュー選択パッケージ        ",1,1,7
  1789. 22320 SYMBOL(8,136),"・入力パッケージ                ",1,1,7
  1790. 22330 '
  1791. 22340 VIL_WIN_X%=50:VIL_WIN_Y%=240
  1792. 22350 VIL_WIN_W%=VIL_WIN_X%+16*13+15:VIL_WIN_Z%=VIL_WIN_Y%+68+16+7
  1793. 22360 VIL_WIN_UB%=0:VIL_WIN_DB%=0:VIL_WIN_LB%=0:VIL_WIN_RB%=0
  1794. 22370 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP:GOSUB *VIL_WIN_PMR
  1795. 22380 CLS
  1796. 22390 SYMBOL(8,  8),"ウィンドウ・パッケージでは",1,1,7
  1797. 22400 SYMBOL(8, 28),"このように画面の矩形領域を",1,1,7
  1798. 22410 SYMBOL(8, 48),"退避し、ウィンドウを開くこ",1,1,7
  1799. 22420 SYMBOL(8, 68),"とができます。      ",1,1,7
  1800. 22430 '
  1801. 22440 VIL_WIN_X%=30:VIL_WIN_Y%=350
  1802. 22450 VIL_WIN_W%=VIL_WIN_X%+16*15+15:VIL_WIN_Z%=VIL_WIN_Y%+28+16+7
  1803. 22460 VIL_WIN_UB%=5:VIL_WIN_DB%=5:VIL_WIN_LB%=5:VIL_WIN_RB%=5
  1804. 22470 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP
  1805. 22480 LINE(VIL_WIN_X%-5,VIL_WIN_Y%-5)-(VIL_WIN_W%+5,VIL_WIN_Z%+5),PSET,0,B
  1806. 22490 LINE(VIL_WIN_X%-4,VIL_WIN_Y%-4)-(VIL_WIN_W%+4,VIL_WIN_Z%+4),PSET,7,BF
  1807. 22500 LINE(VIL_WIN_X%-2,VIL_WIN_Y%-2)-(VIL_WIN_W%+2,VIL_WIN_Z%+2),PSET,0,B
  1808. 22510 LINE(VIL_WIN_X%-1,VIL_WIN_Y%-1)-(VIL_WIN_W%+1,VIL_WIN_Z%+1),PSET,0,B
  1809. 22520 GOSUB *VIL_WIN_PMR
  1810. 22530 SYMBOL(8,  8),"必要ならばユーザ・プログラムが",1,1,0
  1811. 22540 SYMBOL(8, 28),"枠などを描画できます。    ",1,1,0
  1812. 22550 '
  1813. 22560 VIL_WIN_X%=360:VIL_WIN_Y%=40
  1814. 22570 VIL_WIN_W%=VIL_WIN_X%+16*11+15:VIL_WIN_Z%=VIL_WIN_Y%+139
  1815. 22580 VIL_WIN_UB%=2:VIL_WIN_DB%=2:VIL_WIN_LB%=2:VIL_WIN_RB%=2
  1816. 22590 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP
  1817. 22600 DEF PEN 0,2
  1818. 22610 LINE(VIL_WIN_X%-2,VIL_WIN_Y%-2)-(VIL_WIN_W%+1,VIL_WIN_Z%+1),PSET,1,B
  1819. 22620 GOSUB *VIL_WIN_PMR
  1820. 22630 CLS
  1821. 22640 FOR I=1 TO 7
  1822. 22650   CIRCLE(0,0),I*5,I
  1823. 22660   CIRCLE(190,10),I*5,I
  1824. 22670   SYMBOL(-60+I*8*6,120),"SAMPLE",1,1,I
  1825. 22680 NEXT
  1826. 22690 SYMBOL(8, 50),"ウィンドウ内への描画は",1,1,7
  1827. 22700 SYMBOL(8, 70),"このようにクリッピング",1,1,7
  1828. 22710 SYMBOL(8, 90),"させることが可能です。",1,1,7
  1829. 22720 '
  1830. 22730 PALETTE 4,[ 64, 64, 64]
  1831. 22740 PALETTE 5,[128,  0,  0]
  1832. 22750 RESTORE *WIN_DATA1
  1833. 22760 FOR I=0 TO 2
  1834. 22770   VIL_WIN_X%=320+I*24:VIL_WIN_Y%=240+I*48
  1835. 22780   VIL_WIN_W%=VIL_WIN_X%+119:VIL_WIN_Z%=VIL_WIN_Y%+63
  1836. 22790   VIL_WIN_UB%=16:VIL_WIN_DB%=2:VIL_WIN_LB%=2:VIL_WIN_RB%=2
  1837. 22800   GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP
  1838. 22810   LINE(VIL_WIN_X%-2,VIL_WIN_Y%-16)                                                -(VIL_WIN_W%+2,VIL_WIN_Y%- 2),PSET,%5,BF
  1839. 22820   DEF PEN 0,2
  1840. 22830   LINE(VIL_WIN_X%-2,VIL_WIN_Y%-16)                                                -(VIL_WIN_W%+1,VIL_WIN_Z%+ 1),PSET,%4,B
  1841. 22840   LINE(VIL_WIN_X%-2,VIL_WIN_Y%- 2)                                                -(VIL_WIN_W%+1,VIL_WIN_Y% -2),PSET,%4
  1842. 22850   DEF PEN 0,1
  1843. 22860   LINE(VIL_WIN_X%+1,VIL_WIN_Y%-13)                                                -(VIL_WIN_X%+9,VIL_WIN_Y%-4),PSET,%4,B
  1844. 22870   CIRCLE(VIL_WIN_X%+5,VIL_WIN_Y%-8.6!),2,%1,1.5!,,,F
  1845. 22880   LINE(VIL_WIN_W%-1,VIL_WIN_Y%-13)                                                -(VIL_WIN_W%-9,VIL_WIN_Y%- 4),PSET,%4,B
  1846. 22890   LINE(VIL_WIN_W%-1,VIL_WIN_Y%-13)                                                -(VIL_WIN_W%-5,VIL_WIN_Y%- 8),PSET,%4,B
  1847. 22900   SYMBOL(VIL_WIN_X%+13,VIL_WIN_Y%-11),"xterm",.5!,.5!,%4
  1848. 22910   GOSUB *VIL_WIN_PMR
  1849. 22920   CLS
  1850. 22930   READ A$
  1851. 22940   SYMBOL(8,8),A$,1,1,7
  1852. 22950 NEXT
  1853. 22960 '
  1854. 22970 *WIN_DATA1
  1855. 22980 DATA "ウィンドウの","重ね合わせも","このとおり"
  1856. 22990 '
  1857. 23000 RESTORE *WIN_DATA2
  1858. 23010 GOSUB *VIL_WIN_PMA
  1859. 23020 LINE(272,434)-(639,479),PSET,7,BF
  1860. 23030 SYMBOL(280,440),"[RET]キー/マウスの左クリック/パッドの[A]で",1,1,0
  1861. 23040 SYMBOL(280,460),"ウィンドウが1個ずつ閉じます。              ",1,1,0
  1862. 23050 FOR I=1 TO 6 
  1863. 23060   WHILE INKEY$=CHR$(13) OR MOUSE(3,0) OR PTRIG(1)=1:WEND
  1864. 23070   WHILE INKEY$<>CHR$(13) AND MOUSE(3,0)=0 AND PTRIG(1)<>1:WEND
  1865. 23080   READ VIL_WIN_UB%,VIL_WIN_DB%,VIL_WIN_LB%,VIL_WIN_RB%
  1866. 23090   GOSUB *VIL_WIN_CL 
  1867. 23100 NEXT
  1868. 23110 '
  1869. 23120 *WIN_DATA2
  1870. 23130 DATA 16,2,2,2, 16,2,2,2, 16,2,2,2, 2,2,2,2, 5,5,5,5, 0,0,0,0
  1871. 23140 '
  1872. 23150 LINE(272,434)-(639,479),PSET,7,BF
  1873. 23160 SYMBOL(280,440),"取消キー/マウスの右クリック/パッドの[B]で",1,1,0
  1874. 23170 SYMBOL(280,460),"次に進みます。",1,1,0
  1875. 23180 '
  1876. 23190 VIL_WIN_X%=50:VIL_WIN_Y%=240
  1877. 23200 VIL_WIN_W%=VIL_WIN_X%+16*13+15:VIL_WIN_Z%=VIL_WIN_Y%+148+16+7
  1878. 23210 VIL_WIN_UB%=0:VIL_WIN_DB%=0:VIL_WIN_LB%=0:VIL_WIN_RB%=0
  1879. 23220 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP:GOSUB *VIL_WIN_PMR
  1880. 23230 CLS
  1881. 23240 SYMBOL(8,  8),"メニュー選択パッケージでは",1,1,7
  1882. 23250 SYMBOL(8, 28),"・マウス         ",1,1,7
  1883. 23260 SYMBOL(8, 48),"・パッド         ",1,1,7
  1884. 23270 SYMBOL(8, 68),"・テンキー        ",1,1,7
  1885. 23280 SYMBOL(8, 88),"・カ-ソルキー      ",1,1,7
  1886. 23290 SYMBOL(8,108),"などを使用して、     ",1,1,7
  1887. 23300 SYMBOL(8,128),"画面の矩形領域(ボックス)",1,1,7
  1888. 23310 SYMBOL(8,148),"の一つを選択できます。  ",1,1,7
  1889. 23320 '
  1890. 23330 VIL_WIN_X%=320:VIL_WIN_Y%=40
  1891. 23340 VIL_WIN_W%=VIL_WIN_X%+16*18+15:VIL_WIN_Z%=VIL_WIN_Y%+359
  1892. 23350 VIL_WIN_UB%=0:VIL_WIN_DB%=0:VIL_WIN_LB%=0:VIL_WIN_RB%=0
  1893. 23360 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP:GOSUB *VIL_WIN_PMR
  1894. 23370 '
  1895. 23380 CLS
  1896. 23390 SYMBOL(8,  8),"例えば下の数字の中から",1,1,7
  1897. 23400 SYMBOL(8, 28),"一つ選択してみてください。",1,1,7
  1898. 23410 FOR Y=0 TO 2
  1899. 23420   FOR X=0 TO 2
  1900. 23430     LINE(X*64+16,192-Y*64)-(X*64+63,192-Y*64+47),PSET,7,B
  1901. 23440     SYMBOL(X*64+28,194-Y*64),FNVIL_I2S$(Y*3+X+1),3,3,7
  1902. 23450   NEXT
  1903. 23460 NEXT
  1904. 23470 SYMBOL(16, 304),"選択→",1,1,7
  1905. 23480 LINE(80,288)-(127,335),PSET,7,B
  1906. 23490 '
  1907. 23500 VIL_MSEL_BN%=1:VIL_MSEL_MN%=0:VIL_MSEL_BC%=0
  1908. 23510 '
  1909. 23520 *MSEL_TENKEY1
  1910. 23530 VIL_X%=12:VIL_Y%=188:VIL_W%=VIL_X%+55:VIL_Z%=VIL_Y%+55
  1911. 23540 VIL_XN%=3:VIL_YN%=3:VIL_XL%=64:VIL_YL%=64:VIL_MSEL_BD%=4:VIL_C%=10
  1912. 23550 VIL_MSEL_BB%=1:VIL_MSEL_BE%=9
  1913. 23560 GOSUB *VIL_MSEL_M
  1914. 23570 IF VIL_KN%>0 THEN
  1915. 23580   LINE(81,289)-(126,334),PRESET,,BF
  1916. 23590   SYMBOL(92,290),FNVIL_P2S$(VIL_KN%),3,3,6
  1917. 23600 ENDIF
  1918. 23610 IF VIL_KN%<>-1 THEN *MSEL_TENKEY1
  1919. 23620 '
  1920. 23630 *MSEL_TAU1
  1921. 23640 CLS
  1922. 23650 '
  1923. 23660 ANS=INT(RND*64)+1
  1924. 23670 FOR Y=0 TO 7
  1925. 23680   FOR X=0 TO 7
  1926. 23690     XA=RND*8:YA=RND*8
  1927. 23700     SYMBOL(X*24+XA+64,Y*24+YA+64),                                                     KMID$("ΤT",2+(Y*8+X+1=ANS),1),1,1,RND*6+1
  1928. 23710   NEXT
  1929. 23720 NEXT
  1930. 23730 SYMBOL(8,260)," ☆☆☆  「Τを探せ」ゲ-ム  ☆☆☆ ",1,1,6
  1931. 23740 SYMBOL(8,280),"T(ティー)の中に一つだけ隠れている  ",1,1,4
  1932. 23750 SYMBOL(8,300),"Τ(タウ)を見つけて選択してください。",1,1,4
  1933. 23760 '
  1934. 23770 VIL_MSEL_BN%=1:VIL_MSEL_MN%=0:VIL_MSEL_BC%=0
  1935. 23780 '
  1936. 23790 *MSEL_TAU2
  1937. 23800 VIL_X%=64:VIL_Y%=64:VIL_W%=VIL_X%+23:VIL_Z%=VIL_Y%+23
  1938. 23810 VIL_XL%=24:VIL_YL%=24:VIL_XN%=8:VIL_YN%=8:VIL_MSEL_BD%=0:VIL_C%=15
  1939. 23820 VIL_MSEL_BB%=1:VIL_MSEL_BE%=64
  1940. 23830 GOSUB *VIL_MSEL_M
  1941. 23840 IF VIL_KN%>0 THEN 
  1942. 23850   IF VIL_KN%=ANS THEN
  1943. 23860     LINE(80,320)-(239,335),PRESET,,BF
  1944. 23870     SYMBOL(80,320),"☆☆☆ 正解! ☆☆☆",1,1,6
  1945. 23880     GOSUB *VIL_BEEP_G
  1946. 23890     GOTO *MSEL_TAU1
  1947. 23900   ELSE
  1948. 23910     LINE(80,320)-(239,335),PRESET,,BF
  1949. 23920     SYMBOL(80,320),"××× はずれ ×××",1,1,2
  1950. 23930     GOSUB *VIL_BEEP_B
  1951. 23940   ENDIF
  1952. 23950 ENDIF
  1953. 23960 IF VIL_KN%<>-1 THEN *MSEL_TAU2
  1954. 23970 '
  1955. 23980 *MSEL_ADV1
  1956. 23990 CLS
  1957. 24000 '
  1958. 24010 LINE(4,  4)-(299,295),PSET,4,B
  1959. 24020 LINE(8, 30)-(295,229),PSET,4,B
  1960. 24030 LINE(8,234)-(295,261),PSET,4,B
  1961. 24040 SYMBOL(104,10),"MYSTIC HOUSE",1,1,4
  1962. 24050 SYMBOL(16,238),"見る   取る   動かす たたく 終わる",1,1,4
  1963. 24060 SYMBOL(8,302)," ↑ アドベンチャーゲームなどにも",1,1,7
  1964. 24070 SYMBOL(8,322),"   利用できます。",1,1,7
  1965. 24080 RESTORE *MSEL_DATA1
  1966. 24090 FOR I=0 TO 17
  1967. 24100   READ K,X,Y:LINE(X,Y)-(X,Y),PSET,4
  1968. 24110   FOR J=2 TO K:READ X,Y:LINE -(X,Y),PSET,4:NEXT
  1969. 24120 NEXT
  1970. 24130 '
  1971. 24140 *MSEL_DATA1
  1972. 24150 DATA 4,  48, 30,  48,110, 255,110, 255, 30
  1973. 24160 DATA 2,  48,110,   8,229
  1974. 24170 DATA 2, 255,110, 295,229
  1975. 24180 DATA 4,  70,110,  70, 35, 110, 35, 110,110
  1976. 24190 DATA 5,  74, 70,  74, 73,  77, 73,  77, 70,  74, 70
  1977. 24200 DATA 5, 130,130, 120,160, 210,160, 200,130, 130,130
  1978. 24210 DATA 4, 120,160, 120,170, 210,170, 210,160
  1979. 24220 DATA 4, 135,170, 125,210, 130,210, 140,170
  1980. 24230 DATA 4, 195,170, 205,210, 200,210, 190,170
  1981. 24240 DATA 5, 265, 40, 265, 80, 280,130, 280, 90, 265, 40
  1982. 24250 DATA 5, 160, 45, 160, 80, 200, 80, 200, 45, 160, 45
  1983. 24260 DATA 5, 170, 50, 173, 74, 187, 70, 188, 52, 170, 50
  1984. 24270 DATA 2, 174, 56, 177, 55
  1985. 24280 DATA 2, 182, 56, 185, 58
  1986. 24290 DATA 2, 180, 57, 178, 62
  1987. 24300 DATA 2, 176, 70, 181, 67
  1988. 24310 DATA 5,  65,127,  65,122, 70,127,  65,127, 58,134
  1989. 24320 DATA 2,  61,131,  63,134
  1990. 24330 '
  1991. 24340 VIL_MSEL_BN%=1:VIL_MSEL_BC%=0
  1992. 24350 '
  1993. 24360 *MSEL_ADV2
  1994. 24370 VIL_X%=14:VIL_Y%=236:VIL_W%=VIL_X%+51:VIL_Z%=VIL_Y%+23
  1995. 24380 VIL_XN%=5:VIL_YN%=1:VIL_XL%=56:VIL_MSEL_BD%=0:VIL_C%=15
  1996. 24390 VIL_MSEL_BB%=1:VIL_MSEL_BE%=5:VIL_MSEL_MN%=101
  1997. 24400 GOSUB *VIL_MSEL_M
  1998. 24410 IF VIL_KN%>0 THEN
  1999. 24420   VIL_X%=8:VIL_Y%=265:VIL_L%=36:VIL_C%=12
  2000. 24430   VIL_A$=KMID$("見る 取る 動かすたたく終わる",VIL_KN%*3-2,3)
  2001. 24440   GOSUB *VIL_INP_GPRINT
  2002. 24450   IF VIL_KN%=5 THEN *MSEL_CNFM1
  2003. 24460   VERB=VIL_KN%
  2004. 24470 '
  2005. 24480   RESTORE *MSEL_DATA2
  2006. 24490   FOR I=1 TO 5
  2007. 24500     READ VIL_MSEL_X%(I),VIL_MSEL_Y%(I),VIL_MSEL_W%(I),VIL_MSEL_Z%(I)
  2008. 24510   NEXT
  2009. 24520   VIL_XN%=5:VIL_YN%=1:VIL_MSEL_BD%=0:VIL_C%=15
  2010. 24530   VIL_MSEL_MN%=102:VIL_MSEL_BC%=0
  2011. 24540   VIL_MSEL_BB%=1:VIL_MSEL_BE%=5
  2012. 24550 *MSEL_ADV3
  2013. 24560   GOSUB *VIL_MSEL_IN
  2014. 24570   GOSUB *VIL_MSEL_BC
  2015. 24580   IF VIL_KN%<1 THEN *MSEL_ADV3
  2016. 24590 '
  2017. 24600 *MSEL_DATA2
  2018. 24610   DATA  68, 33,112,112
  2019. 24620   DATA 158, 43,202, 82 
  2020. 24630   DATA 263, 38,282,132
  2021. 24640   DATA  56,120, 72,136
  2022. 24650   DATA 118,128,212,212
  2023. 24660 '
  2024. 24670   RESTORE *MSEL_DATA3:FOR I=1 TO VIL_KN%:READ VIL_A$:NEXT
  2025. 24680 '
  2026. 24690 *MSEL_DATA3
  2027. 24700   DATA ドア,肖像画,窓,鍵,テーブル
  2028. 24710 '
  2029. 24720   VIL_X%=64:VIL_Y%=265:VIL_L%=8:VIL_C%=12:VIL_CB%=0
  2030. 24730   GOSUB *VIL_INP_GPRINT
  2031. 24740 '
  2032. 24750   RESTORE *MSEL_DATA4
  2033. 24760   FOR I=1 TO VERB
  2034. 24770     IF I=VERB THEN
  2035. 24780       FOR J=1 TO VIL_KN%:READ VIL_A$:NEXT
  2036. 24790     ELSE
  2037. 24800       FOR J=1 TO 5:READ VIL_A$:NEXT
  2038. 24810     ENDIF
  2039. 24820   NEXT
  2040. 24830 '
  2041. 24840 *MSEL_DATA4
  2042. 24850   DATA "閉まっている   ","見覚えのない顔だ ","外は晴れている  "
  2043. 24860   DATA "黄金の鍵だ    ","埃が積もっている "
  2044. 24870   DATA "取れるわけがない ","使い道はなさそうだ","取れるわけがない "
  2045. 24880   DATA "何故か取れない  ","重くて持てない  "
  2046. 24890   DATA "鍵が掛かっている ","ネジ止めされている","錆びついている  "
  2047. 24900   DATA "何故か動かない  ","疲れるからいやだ "
  2048. 24910   DATA "トントン     ","手が痛いからいやだ","叩いても開かない "
  2049. 24920   DATA "叩いてどーする  ","ドンドン     "
  2050. 24930 '
  2051. 24940   VIL_X%=136:VIL_Y%=265:VIL_L%=20:VIL_C%=12:VIL_CB%=0
  2052. 24950   VIL_A$=": "+VIL_A$
  2053. 24960   GOSUB *VIL_INP_GPRINT
  2054. 24970 ENDIF
  2055. 24980 GOTO *MSEL_ADV2
  2056. 24990 '
  2057. 25000 *MSEL_CNFM1
  2058. 25010 MAXTURN=50
  2059. 25020 RESTORE *MSEL_DATA5
  2060. 25030 FOR I=1 TO 8
  2061. 25040   READ J:VIL_MSEL_BN%(105+I)=J
  2062. 25050 NEXT
  2063. 25060 '
  2064. 25070 *MSEL_DATA5
  2065. 25080 DATA 2,1,1,2,2,4,1,1
  2066. 25090 '
  2067. 25100 *MSEL_CNFM2
  2068. 25110 CLS
  2069. 25120 SYMBOL(16,  8)," ☆☆☆☆☆ 設 定 ☆☆☆☆☆ ",1,1,6
  2070. 25130 SYMBOL(16, 36),"表示       英語    日本語  ",1,1,7
  2071. 25140 SYMBOL(16, 60),"BGM      ON      OFF  ",1,1,7
  2072. 25150 SYMBOL(16, 84),"効果音   ON    OFF  ",1,1,7
  2073. 25160 SYMBOL(16,108),"ヒント      あり      なし   ",1,1,7
  2074. 25170 SYMBOL(16,132),"難易度      初級 中級 上級   ",1,1,7
  2075. 25180 SYMBOL(16,156),"表示速度  0 1 2 3 4 5",1,1,7
  2076. 25190 SYMBOL(16,180),"最大ターン (00)  ←    →  (99)",1,1,7
  2077. 25200 SYMBOL(16,212),"    ~ 決定 取消 ~    ",1,1,7
  2078. 25210 SYMBOL(16,276)," ↑ 設定メニューも実現できます。",1,1,5
  2079. 25220 GOSUB *PRINT_TURN
  2080. 25230 '
  2081. 25240 VIL_MSEL_BC%=0:VIL_VWM_R%=0
  2082. 25250 VIL_C%=15:VIL_CC%=7
  2083. 25260 VIL_MSEL_CMN%=105:VIL_MSEL_CMR%=8
  2084. 25270 VIL_MSEL_BN%(VIL_MSEL_CMN%)=1 'カーソル位置を第一行に設定
  2085. 25280 GOSUB *VIL_MSEL_CNFSV
  2086. 25290 MAXTURN_OLD=MAXTURN
  2087. 25300 '
  2088. 25310 RESTORE *MSEL_DATA6
  2089. 25320 FOR I=1 TO 8
  2090. 25330   READ VIL_MSEL_CX%(I),VIL_MSEL_CY%(I)
  2091. 25340   READ W,Z
  2092. 25350     VIL_MSEL_CW%(I)=VIL_MSEL_CX%(I)+W
  2093. 25360     VIL_MSEL_CZ%(I)=VIL_MSEL_CY%(I)+Z
  2094. 25370   READ VIL_MSEL_CL%(I)
  2095. 25380   READ VIL_MSEL_CN%(I),VIL_MSEL_CBB%(I),VIL_MSEL_CBE%(I)
  2096. 25390 NEXT
  2097. 25400 '
  2098. 25410 *MSEL_DATA6
  2099. 25420 DATA 108, 34, 51, 19,  96,  2,1,2
  2100. 25430 DATA 108, 58, 51, 19,  96,  2,1,2
  2101. 25440 DATA 108, 82, 51, 19,  96,  2,1,2
  2102. 25450 DATA 108,106, 51, 19,  96,  2,1,2
  2103. 25460 DATA 108,130, 35, 19,  48,  3,1,3
  2104. 25470 DATA 108,154, 19, 19,  32,  6,0,5
  2105. 25480 DATA 108,178, 35, 19, 144,  2,1,2
  2106. 25490 DATA 108,210, 35, 19,  48,  2,1,2
  2107. 25500 '
  2108. 25510 ENDF=0
  2109. 25520 WHILE ENDF=0
  2110. 25530   GOSUB *VIL_MSEL_CNFM
  2111. 25540   IF VIL_MSEL_CR%=7 AND VIL_KN%>0 THEN
  2112. 25550     MAXTURN=MAXTURN-(VIL_KN%=1)*(MAXTURN>0)+(VIL_KN%=2)*(MAXTURN<99)
  2113. 25560     GOSUB *PRINT_TURN
  2114. 25570   ELSE IF VIL_MSEL_CR%=8 THEN
  2115. 25580     ENDF=-1
  2116. 25590     IF VIL_KN%=2 THEN GOSUB *VIL_MSEL_CNFLD:MAXTURN=MAXTURN_OLD
  2117. 25600 '                    設定を取消
  2118. 25610   ENDIF
  2119. 25620 WEND
  2120. 25630 '
  2121. 25640 *MSEL_CNFM3
  2122. 25650 SYMBOL(16,304),"    もう一度やりますか?    ",1,1,7
  2123. 25660 VIL_X%=92:VIL_Y%=334:VIL_MSEL_BN%=1:VIL_C%=15
  2124. 25670 GOSUB *VIL_SEL_YN
  2125. 25680 SYMBOL(16,304),"                 ",1,1,7
  2126. 25690 IF VIL_KN%=1 THEN *MSEL_CNFM2                                                             ELSE IF VIL_KN%=2 THEN *INP ELSE *MSEL_CNFM3
  2127. 25700 '
  2128. 25710 *PRINT_TURN
  2129. 25720 VIL_X%=192:VIL_Y%=180:VIL_L%=2:VIL_C%=15:VIL_CB%=0
  2130. 25730 VIL_A$=FNVIL_P2S0$(MAXTURN,2)
  2131. 25740 GOSUB *VIL_INP_GPRINT
  2132. 25750 RETURN
  2133. 25760 '
  2134. 25770 *INP
  2135. 25780 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_CL:GOSUB *VIL_WIN_CL
  2136. 25790 '
  2137. 25800 LINE(272,434)-(639,479),PSET,4,BF
  2138. 25810 VIL_WIN_X%=16:VIL_WIN_Y%=240
  2139. 25820 VIL_WIN_W%=VIL_WIN_X%+16*15+15:VIL_WIN_Z%=VIL_WIN_Y%+68+16+7
  2140. 25830 VIL_WIN_UB%=0:VIL_WIN_DB%=0:VIL_WIN_LB%=0:VIL_WIN_RB%=0
  2141. 25840 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP:GOSUB *VIL_WIN_PMR
  2142. 25850 CLS
  2143. 25860 SYMBOL(8,  8),"入力パッケージでは、     ",1,1,7
  2144. 25870 SYMBOL(8, 28),"・入力文字列の最大長を指定可能",1,1,7
  2145. 25880 SYMBOL(8, 48),"・日本語入力が可能      ",1,1,7
  2146. 25890 SYMBOL(8, 68),"・ヒストリ呼び出しが可能     ",1,1,7
  2147. 25900 '
  2148. 25910 VIL_WIN_X%=320:VIL_WIN_Y%=8
  2149. 25920 VIL_WIN_W%=VIL_WIN_X%+16*18+15:VIL_WIN_Z%=VIL_WIN_Y%+376+16+7
  2150. 25930 VIL_WIN_UB%=0:VIL_WIN_DB%=0:VIL_WIN_LB%=0:VIL_WIN_RB%=0
  2151. 25940 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP:GOSUB *VIL_WIN_PMR
  2152. 25950 NAM$="":TIM$=""
  2153. 25960 '
  2154. 25970 *INP_NAME1
  2155. 25980 CLS:GOSUB *VIL_INP_FEPON
  2156. 25990 SYMBOL(8,  8),"***** 使用可能キー *****",1,1,6
  2157. 26000 SYMBOL(8, 28),"[RET]   : 決定           ",1,1,7
  2158. 26010 SYMBOL(8, 48),"[取消]  : 取消           ",1,1,7
  2159. 26020 SYMBOL(8, 68),"← →  : カーソル移動       ",1,1,7
  2160. 26030 SYMBOL(8, 88),"[BS]    : カーソル位置の左1文字削除",1,1,7
  2161. 26040 SYMBOL(8,108),"[削除]  : カーソル位置1文字削除  ",1,1,7
  2162. 26050 SYMBOL(8,128),"[HOME]  : クリア          ",1,1,7
  2163. 26060 SYMBOL(8,148),"↑↓    : ヒストリー呼び出し     ",1,1,7
  2164. 26070 SYMBOL(8,168),"マウス左/右 : [決定]/[取消]と等価  ",1,1,7
  2165. 26080 SYMBOL(8,188),"パッドA/B : [決定]/[取消]と等価  ",1,1,7
  2166. 26090 SYMBOL(8,208),"方向ボタン  : カーソルキーと等価  ",1,1,7
  2167. 26100 SYMBOL(8,228),"*****   使用例   *****",1,1,6
  2168. 26110 '
  2169. 26120 SYMBOL(8,248),"あなたの名前を入力してください。  ",1,1,7
  2170. 26130 SYMBOL(8,268),"(半角16文字以内) :         ",1,1,7
  2171. 26140 '
  2172. 26150 *INP_NAME2
  2173. 26160 VIL_X%=8+16*9:VIL_Y%=268:VIL_L%=16:VIL_C%=15:VIL_CB%=0:VIL_A$="" 'NAM$
  2174. 26170 VIL_INP_HSN%=1
  2175. 26180 GOSUB *VIL_INP_STR
  2176. 26190 IF VIL_KN%=-1 OR VIL_A$="" THEN *INP_NAME2
  2177. 26200 NAM$=VIL_A$
  2178. 26210 '
  2179. 26220 SYMBOL(8,288),"現在時刻を入力してください。    ",1,1,7
  2180. 26230 SYMBOL(8,308),"(00:00~23:59)   :         ",1,1,7
  2181. 26240 '
  2182. 26250 *INP_NAME3
  2183. 26260 VIL_INP_HSN%=2
  2184. 26270 VIL_X%=8+16*9:VIL_Y%=308:VIL_L%=5:VIL_C%=15:VIL_CB%=0:VIL_A$="" 'TIM$
  2185. 26280 GOSUB *VIL_INP_STR
  2186. 26290 IF VIL_KN%=-1 OR VIL_A$="" THEN *INP_NAME3
  2187. 26300 TIM$=VIL_A$
  2188. 26310 IF LEN(VIL_A$)<>5 OR MID$(VIL_A$,3,1)<>":"                                     THEN GOSUB *VIL_BEEP_B:GOTO *INP_NAME3
  2189. 26320 HOUR=VAL(LEFT$(VIL_A$,2)):MINUTE=VAL(MID$(VIL_A$,4,2))
  2190. 26330 IF HOUR<0 OR 23<HOUR OR MINUTE<0 OR 59<MINUTE THEN
  2191. 26340   GOSUB *VIL_BEEP_B:GOTO *INP_NAME3
  2192. 26350 ENDIF
  2193. 26360 IF 6<=HOUR AND HOUR<=11 THEN
  2194. 26370   A$="おはよう。"
  2195. 26380 ELSE IF 12=<HOUR AND HOUR<=18 THEN
  2196. 26390   A$="こんにちは。"
  2197. 26400 ELSE
  2198. 26410   A$="こんばんは。"
  2199. 26420 ENDIF
  2200. 26430 '
  2201. 26440 GOSUB *VIL_INP_FEPOFF
  2202. 26450 SYMBOL(8,328),"現在"+FNVIL_P2S$(HOUR)+"時"+FNVIL_P2S$(MINUTE)+"分。"                      ,1,1,4
  2203. 26460 SYMBOL(8,348),NAM$+"さん、"+A$,1,1,4
  2204. 26470 *INP_NAME4
  2205. 26480 SYMBOL(8,376),"もう一度やる?",1,1,7
  2206. 26490 VIL_MSEL_BN%=1
  2207. 26500 VIL_X%=132:VIL_Y%=372
  2208. 26510 GOSUB *VIL_SEL_YN
  2209. 26520 IF VIL_KN%<1 THEN *INP_NAME4
  2210. 26530 IF VIL_KN%=1 THEN *INP_NAME1
  2211. 26540 '
  2212. 26550 'SCREEN 1,0
  2213. 26560 RETURN
  2214. 26570 '
  2215. 26580 '<<<<<<<<<<<<<<<<<<<<  ウィンドウマネージャ  >>>>>>>>>>>>>>>>>>>>
  2216. 26590 *VWM
  2217. 26600 CLS'SCREEN 1,0:CLS
  2218. 26610 VIL_VWM_N%=0
  2219. 26620 VIL_WIN_UB%=14:VIL_WIN_DB%=8:VIL_WIN_RB%=8:VIL_WIN_LB%=8
  2220. 26630                                               'ウィンドウ枠幅設定
  2221. 26640 PALETTE 7,[255,255,255]  'パレット(8 XOR 15)を白にする
  2222. 26650 PALETTE 5,[80,80,0]
  2223. 26660 FOR Y=0 TO 479 STEP 16
  2224. 26670   FOR X=0 TO 639 STEP 8*7
  2225. 26680     SYMBOL(X,Y),"VIL ",1,1,%5,,NOT
  2226. 26690   NEXT
  2227. 26700 NEXT
  2228. 26710 '
  2229. 26720 VIL_WIN_X%=100                :VIL_WIN_Y%=40
  2230. 26730 VIL_WIN_W%=VIL_WIN_X%+16*19+15:VIL_WIN_Z%=VIL_WIN_Y%+8+16+7
  2231. 26740 VIL_VWM_T$="VWM":VIL_VWM_AT%=0
  2232. 26750 GOSUB *VIL_VWM_OP
  2233. 26760 SYMBOL(  8,  8),"~ ウィンドウマネージャ・パッケージ ~",1,1,6
  2234. 26770 '
  2235. 26780 GOSUB *VIL_WIN_PMA
  2236. 26790 VIL_WIN_X%=20                 :VIL_WIN_Y%=80
  2237. 26800 VIL_WIN_W%=VIL_WIN_X%+16*16+15:VIL_WIN_Z%=VIL_WIN_Y%+136+16+7
  2238. 26810 VIL_VWM_T$="MOVE":VIL_VWM_AT%=8
  2239. 26820 GOSUB *VIL_VWM_OP
  2240. 26830 SYMBOL(  8,  8),"   ~ ウィンドウ移動 ~   ",1,1,6
  2241. 26840 SYMBOL(  8, 36)," MOVE 属性をもつウィンドウは、上",1,1,7
  2242. 26850 SYMBOL(  8, 56),"部のタイトルバーにマウスカーソル",1,1,7
  2243. 26860 SYMBOL(  8, 76),"を合わせて左ボタンを押すと、ドラ",1,1,7
  2244. 26870 SYMBOL(  8, 96),"ッグで動かすことができます。  ",1,1,7
  2245. 26880 SYMBOL(  8,136),"       納得した。→   ",1,1,7
  2246. 26890 '
  2247. 26900 VIL_KN%=0
  2248. 26910 WHILE VIL_KN%<>1
  2249. 26920   VIL_X%=228:VIL_Y%=132
  2250. 26930   GOSUB *VIL_SEL_OK
  2251. 26940   IF VIL_KN%=-2 THEN GOSUB *VIL_VWM_WIN
  2252. 26950 WEND
  2253. 26960 '
  2254. 26970 VIL_WIN_X%=60                 :VIL_WIN_Y%=122
  2255. 26980 VIL_WIN_W%=VIL_WIN_X%+16*15+15:VIL_WIN_Z%=VIL_WIN_Y%+116+16+7
  2256. 26990 VIL_VWM_T$="CLOSE 0":VIL_VWM_AT%=0
  2257. 27000 GOSUB *VIL_VWM_OP
  2258. 27010 SYMBOL(8, 8)," ~ ウィンドウ・クローズ ~ ",1,1,6
  2259. 27020 SYMBOL(8,36),"CLOSE 属性をもつウィンドウは、",1,1,7
  2260. 27030 SYMBOL(8,56),"左上隅の スイッチをクリックす",1,1,7
  2261. 27040 SYMBOL(8,76),"ると、閉じることができます。 ",1,1,7
  2262. 27050 LINE(75,60)-(84,69),PSET,7,B
  2263. 27060 LINE(75,60)-(84,69),PSET,7
  2264. 27070 LINE(75,69)-(84,60),PSET,7
  2265. 27080 '
  2266. 27090 *VWM_CL0
  2267. 27100 '
  2268. 27110 VIL_WIN_X%=160                :VIL_WIN_Y%=250
  2269. 27120 VIL_WIN_W%=VIL_WIN_X%+16*12+15:VIL_WIN_Z%=VIL_WIN_Y%+28+16+7
  2270. 27130 VIL_VWM_T$="CLOSE 1":VIL_VWM_AT%=2
  2271. 27140 GOSUB *VIL_VWM_OP
  2272. 27150 SYMBOL(8, 8),"例えば、このウィンドウを",1,1,7
  2273. 27160 SYMBOL(8,28),"閉じてみてください。  ",1,1,7
  2274. 27170 '
  2275. 27180 VIL_VWM_R%=0
  2276. 27190 WHILE VIL_VWM_R%<>2
  2277. 27200   MOUSE 1,,,1
  2278. 27210   WHILE MOUSE(3,0)=0 AND MOUSE(2,0)=0:WEND
  2279. 27220   VIL_MX%=MOUSE(0):VIL_MY%=MOUSE(1)
  2280. 27230   MOUSE 1,,,0
  2281. 27240   GOSUB *VIL_VWM_WIN
  2282. 27250 WEND
  2283. 27260 '
  2284. 27270 WHILE INKEY$<>"":WEND
  2285. 27280 SYMBOL(8,116),"もう一度やる?",1,1,7
  2286. 27290 '
  2287. 27300 *VWM_CL1
  2288. 27310 '
  2289. 27320 'VIL_KN%=0
  2290. 27330 VIL_X%=132:VIL_Y%=112
  2291. 27340 GOSUB *VIL_SEL_YN
  2292. 27350 IF VIL_KN%<1 THEN *VWM_CL1
  2293. 27360 IF VIL_KN%=1 THEN *VWM_CL0
  2294. 27370 '
  2295. 27380 VIL_WIN_X%=100                :VIL_WIN_Y%=164
  2296. 27390 VIL_WIN_W%=VIL_WIN_X%+16*15+15:VIL_WIN_Z%=VIL_WIN_Y%+136+16+7
  2297. 27400 VIL_VWM_T$="HIDE":VIL_VWM_AT%=4
  2298. 27410 GOSUB *VIL_VWM_OP
  2299. 27420 SYMBOL(8,  8)," ~ ウィンドウ一時消去 ~ ",1,1,6
  2300. 27430 SYMBOL(8, 36)," HIDE 属性をもつウィンドウは、",1,1,7
  2301. 27440 SYMBOL(8, 56),"左上隅の スイッチをクリックす",1,1,7
  2302. 27450 SYMBOL(8, 76),"ると、左ボタンを押している間、",1,1,7
  2303. 27460 SYMBOL(8, 96),"一時的に閉じることができます。",1,1,7
  2304. 27470 SYMBOL(8,136),"  納得したら  →      ",1,1,7
  2305. 27480 LINE(75,60)-(84,69),PSET,7,B
  2306. 27490 LINE(75,69)-(84,60),PSET,7
  2307. 27500 '
  2308. 27510 VIL_KN%=0
  2309. 27520 WHILE VIL_KN% <> 1
  2310. 27530   VIL_X%=212:VIL_Y%=132
  2311. 27540   GOSUB *VIL_SEL_OK
  2312. 27550   IF VIL_KN%=-2 THEN GOSUB *VIL_VWM_WIN
  2313. 27560 WEND
  2314. 27570 '
  2315. 27580 *VWM_RESIZE0
  2316. 27590 VIL_WIN_X%=140                :VIL_WIN_Y%=206
  2317. 27600 VIL_WIN_W%=VIL_WIN_X%+16*16+15:VIL_WIN_Z%=VIL_WIN_Y%+136+16+7
  2318. 27610 VIL_VWM_T$="RESIZE":VIL_VWM_AT%=16
  2319. 27620 GOSUB *VIL_VWM_OP
  2320. 27630 *VWM_RESIZE1
  2321. 27640 SYMBOL(8,  8)," ~ ウィンドウ・サイズ変更 ~ ",1,1,6
  2322. 27650 SYMBOL(8, 36)," RESIZE 属性をもつウィンドウは、",1,1,7
  2323. 27660 SYMBOL(8, 56),"右上隅の スイッチにマウスカーソ",1,1,7
  2324. 27670 SYMBOL(8, 76),"ルを合わせて左ボタンを押すと、ド",1,1,7
  2325. 27680 SYMBOL(8, 96),"ラッグで大きさを変えることができ",1,1,7
  2326. 27690 SYMBOL(8,116),"ます。                          ",1,1,7
  2327. 27700 SYMBOL(8,136),"  納得したら  →       ",1,1,7
  2328. 27710 LINE(75,60)-(84,69),PSET,7,B
  2329. 27720 LINE(75,64)-(80,69),PSET,7,B
  2330. 27730 *VWM_RESIZE2
  2331. 27740 'VIL_KN%=0
  2332. 27750 VIL_X%=212:VIL_Y%=132
  2333. 27760 GOSUB *VIL_SEL_OK
  2334. 27770 IF VIL_KN%=-2 THEN GOSUB *VIL_VWM_WIN:                                        IF VIL_VWM_R%=16 THEN *VWM_RESIZE1
  2335. 27780 IF VIL_KN%<>1 THEN *VWM_RESIZE2
  2336. 27790 '
  2337. 27800 *VWM_YSCRLBAR_0
  2338. 27810 VIL_WIN_X%=100                :VIL_WIN_Y%=100
  2339. 27820 VIL_WIN_W%=VIL_WIN_X%+16*20+15:VIL_WIN_Z%=VIL_WIN_Y%+20*16+15
  2340. 27830 VIL_VWM_T$="Y SCROLL BAR":VIL_VWM_AT%=2+8192
  2341. 27840 VIL_VWM_YLBL%=52:VIL_VWM_YLIL%=16:VIL_VWM_YLIP%=0:VIL_VWM_YLPL%=16
  2342. 27850 GOSUB *VIL_VWM_OP
  2343. 27860 MOUSE 1,,,1:VIL_VWM_R%=0
  2344. 27870 WHILE VIL_VWM_R%<>2
  2345. 27880   VIL_VWM_R%=0
  2346. 27890   IF VIL_SBAR_R%=1 THEN '一行UP
  2347. 27900     GET@A(0,  0)-(16*20+15,20*16+15),VIL_WIN_BF%,                                                                 VIL_WIN_BFO&(VIL_WIN_AN%)
  2348. 27910     PUT@A(0, 20)-(16*20+15,20*16+35),VIL_WIN_BF%,,,,,                                                             VIL_WIN_BFO&(VIL_WIN_AN%)
  2349. 27920     LINE(0,0)-(16*20+15,19),PSET,%VIL_VWM_CB%,BF
  2350. 27930     SYMBOL(8,8),TXTBUF$(VIL_VWM_YLIP%),1,1,7
  2351. 27940   ELSE IF VIL_SBAR_R%=5 THEN '一行DOWN
  2352. 27950     GET@A(0,  0)-(16*20+15,20*16+15),VIL_WIN_BF%,                                                                 VIL_WIN_BFO&(VIL_WIN_AN%)
  2353. 27960     PUT@A(0,-20)-(16*20+15,20*16- 5),VIL_WIN_BF%,,,,,                                                             VIL_WIN_BFO&(VIL_WIN_AN%)
  2354. 27970     LINE(0,20*15+8)-(16*20+15,20*16+15),PSET,%VIL_VWM_CB%,BF
  2355. 27980     SYMBOL(8,20*15+8),TXTBUF$(VIL_VWM_YLIP%+15),1,1,7
  2356. 27990   ELSE 
  2357. 28000     GOSUB *VIL_VWM_CLS
  2358. 28010     FOR I=0 TO 15
  2359. 28020       SYMBOL(8,I*20+8),TXTBUF$(VIL_VWM_YLIP%+I),1,1,7
  2360. 28030     NEXT
  2361. 28040   ENDIF
  2362. 28050   VIL_X%=-1:VIL_Y%=-1:VIL_W%=VIL_X%:VIL_Z%=VIL_Y%
  2363. 28060   VIL_XN%=1:VIL_YN%=1:VIL_MSEL_BD%=0:VIL_C%=15:VIL_MSEL_MN%=0
  2364. 28070   VIL_MSEL_BB%=1:VIL_MSEL_BE%=1
  2365. 28080   WHILE VIL_VWM_R%<>8192 AND VIL_VWM_R%<>2
  2366. 28090     GOSUB *VIL_MSEL_M
  2367. 28100     GOSUB *VIL_VWM_CHECK
  2368. 28110   WEND
  2369. 28120 WEND
  2370. 28130 '
  2371. 28140 *VWM_XSCRLBAR_0
  2372. 28150 VIL_WIN_X%=160                :VIL_WIN_Y%=160
  2373. 28160 VIL_WIN_W%=VIL_WIN_X%+79:VIL_WIN_Z%=VIL_WIN_Y%+79
  2374. 28170 VIL_VWM_T$="X-Y":VIL_VWM_AT%=2+4096+8192
  2375. 28180 VIL_VWM_XLBL%=320:VIL_VWM_XLIL%=80:VIL_VWM_XLIP%=0:VIL_VWM_XLPL%=40
  2376. 28190 VIL_VWM_YLBL%=320:VIL_VWM_YLIL%=80:VIL_VWM_YLIP%=0:VIL_VWM_YLPL%=40
  2377. 28200 GOSUB *VIL_VWM_OP:CLS
  2378. 28210 MOUSE 1,,,1:VIL_VWM_R%=0
  2379. 28220 WHILE VIL_VWM_R%<>2
  2380. 28230   VIL_VWM_R%=0
  2381. 28240   VIL_MG_GN%=20
  2382. 28250   VIL_MG_X%=-VIL_VWM_XLIP%
  2383. 28260   VIL_MG_Y%=-VIL_VWM_YLIP%
  2384. 28270   GOSUB *VIL_MG_PUTG
  2385. 28280   VIL_X%=-1:VIL_Y%=-1:VIL_W%=VIL_X%:VIL_Z%=VIL_Y%
  2386. 28290   VIL_XN%=1:VIL_YN%=1:VIL_MSEL_BD%=0:VIL_C%=15:VIL_MSEL_MN%=0
  2387. 28300   VIL_MSEL_BB%=1:VIL_MSEL_BE%=1
  2388. 28310   WHILE VIL_VWM_R%<>4096 AND VIL_VWM_R%<>8192 AND VIL_VWM_R%<>2
  2389. 28320     GOSUB *VIL_MSEL_M
  2390. 28330     GOSUB *VIL_VWM_CHECK
  2391. 28340   WEND
  2392. 28350 WEND
  2393. 28360 'SCREEN 1,1:CLS:SCREEN 1,0
  2394. 28370 '
  2395. 28380 FOR I=1 TO 4:GOSUB *VIL_VWM_CL:NEXT
  2396. 28390 VIL_WIN_X%=20                 :VIL_WIN_Y%=80
  2397. 28400 VIL_WIN_W%=VIL_WIN_X%+16*18+15:VIL_WIN_Z%=VIL_WIN_Y%+218+16+7
  2398. 28410 VIL_VWM_T$="ALL 0":VIL_VWM_AT%=0
  2399. 28420 GOSUB *VIL_VWM_OP
  2400. 28430 SYMBOL(8,  8)," 最後の例として、全属性を指定したウ",1,1,7
  2401. 28440 SYMBOL(8, 28),"ィンドウを右に挙げます。いろいろ試し",1,1,7
  2402. 28450 SYMBOL(8, 48),"てみてください。          ",1,1,7
  2403. 28460 SYMBOL(8, 68)," なお、このウィンドウは      ",1,1,7
  2404. 28470 SYMBOL(8, 88),"・移動範囲   : (120,40)-(599,439) ",1,1,4
  2405. 28480 SYMBOL(8,108),"・最大サイズ  : 328×248ドット   ",1,1,4
  2406. 28490 SYMBOL(8,128),"・最小サイズ  : 136× 72ドット   ",1,1,4
  2407. 28500 SYMBOL(8,148),"・移動単位   : X・Y方向共 8ドット ",1,1,4
  2408. 28510 SYMBOL(8,168),"・リサイズ単位 : X・Y方向共16ドット ",1,1,4
  2409. 28520 SYMBOL(8,188),"となっています。          ",1,1,7
  2410. 28530 '
  2411. 28540 *VWM_ALL_0
  2412. 28550 VIL_WIN_X%=320           :VIL_WIN_Y%=120
  2413. 28560 VIL_WIN_W%=VIL_WIN_X%+167:VIL_WIN_Z%=VIL_WIN_Y%+119
  2414. 28570 VIL_VWM_T$="ALL 1":VIL_VWM_AT%=1+2+4+8+16
  2415. 28580 GOSUB *VIL_VWM_OP
  2416. 28590 *VWM_ALL_1
  2417. 28600 GOSUB *VWM_ALL_9
  2418. 28610 VIL_VWM_XM%=120       '移動/リサイズ時ウィンドウ左上隅座標最小値
  2419. 28620 VIL_VWM_YM%= 40
  2420. 28630 VIL_VWM_WM%=599       '移動/リサイズ時ウィンドウ右下隅座標最大値
  2421. 28640 VIL_VWM_ZM%=439
  2422. 28650 VIL_VWM_XL%=136       'リサイズ時のX・Y方向長さ最小値
  2423. 28660 VIL_VWM_YL%= 72
  2424. 28670 VIL_VWM_WL%=328       'リサイズ時のX・Y方向長さ最大値
  2425. 28680 VIL_VWM_ZL%=248
  2426. 28690 VIL_VWM_XD%=  8       '移動時の単位ドット数
  2427. 28700 VIL_VWM_YD%=  8
  2428. 28710 VIL_VWM_WD%= 16       'リサイズ時の単位ドット数
  2429. 28720 VIL_VWM_ZD%= 16
  2430. 28730 '
  2431. 28740 MOUSE 1,,,1:VIL_VWM_R%=0
  2432. 28750 WHILE VIL_VWM_R%<>2
  2433. 28760   VIL_X%=8:VIL_Y%=8:VIL_W%=VIL_X%+7:VIL_Z%=VIL_Y%+7
  2434. 28770   VIL_XN%=1:VIL_YN%=1:VIL_MSEL_BD%=0:VIL_C%=15:VIL_MSEL_MN%=0
  2435. 28780   VIL_MSEL_BB%=1:VIL_MSEL_BE%=1
  2436. 28790   GOSUB *VIL_MSEL_M
  2437. 28800   GOSUB *VIL_VWM_CHECK
  2438. 28810   IF VIL_VWM_R% AND VIL_VWM_R%<>2 THEN GOSUB *VWM_ALL_1
  2439. 28820 WEND
  2440. 28830 '
  2441. 28840 *VWM_ALL_2
  2442. 28850 SYMBOL(8,218),"もう一度やる?",1,1,7
  2443. 28860 VIL_KN%=0
  2444. 28870 VIL_X%=132:VIL_Y%=218
  2445. 28880 GOSUB *VIL_SEL_YN
  2446. 28890 IF VIL_KN%<1 THEN *VWM_ALL_2
  2447. 28900 IF VIL_KN%=1 THEN *VWM_ALL_0
  2448. 28910 '
  2449. 28920 VIL_VWM_XM%=  8       '移動/リサイズ時ウィンドウ左上隅座標最小値
  2450. 28930 VIL_VWM_YM%= 14
  2451. 28940 VIL_VWM_WM%=631       '移動/リサイズ時ウィンドウ右下隅座標最大値
  2452. 28950 VIL_VWM_ZM%=471
  2453. 28960 VIL_VWM_XL%= 32       'リサイズ時のX・Y方向長さ最小値
  2454. 28970 VIL_VWM_YL%=  8
  2455. 28980 VIL_VWM_WL%=624       'リサイズ時のX・Y方向長さ最大値
  2456. 28990 VIL_VWM_ZL%=458
  2457. 29000 VIL_VWM_XD%=  1       '移動時の単位ドット数
  2458. 29010 VIL_VWM_YD%=  1
  2459. 29020 VIL_VWM_WD%=  1       'リサイズ時の単位ドット数
  2460. 29030 VIL_VWM_ZD%=  1
  2461. 29040 GOSUB *VIL_VWM_CLALL
  2462. 29050 RETURN
  2463. 29060 '
  2464. 29070 *VWM_ALL_9
  2465. 29080 GOSUB *VIL_VWM_CLS
  2466. 29090 CIRCLE((VIL_WIN_W%-VIL_WIN_X%)\2,(VIL_WIN_Z%-VIL_WIN_Y%)\2)                        ,(VIL_WIN_W%-VIL_WIN_X%)\2,1                                                 ,(VIL_WIN_Z%-VIL_WIN_Y%)/(VIL_WIN_W%-VIL_WIN_X%)
  2467. 29100 A$="位置 ("+FNVIL_P2S0$(VIL_WIN_X%,3)+","                                               +FNVIL_P2S0$(VIL_WIN_Y%,3)+")"
  2468. 29110 SYMBOL(8, 8),A$,1,1,6
  2469. 29120 A$="   -("+FNVIL_P2S0$(VIL_WIN_W%,3)+","                                               +FNVIL_P2S0$(VIL_WIN_Z%,3)+")"
  2470. 29130 SYMBOL(8,28),A$,1,1,6
  2471. 29140 A$="サイズ("+FNVIL_P2S0$(VIL_WIN_W%-VIL_WIN_X%+1,3)+","                                  +FNVIL_P2S0$(VIL_WIN_Z%-VIL_WIN_Y%+1,3)+")"
  2472. 29150 SYMBOL(8,48),A$,1,1,6
  2473. 29160 RETURN
  2474. 29170 '
  2475. 29180 '<<<<<<<<<<<<<<<<<<<<  応用例  >>>>>>>>>>>>>>>>>>>>
  2476. 29190 *APPLY
  2477. 29200 '
  2478. 29210 CLS'SCREEN 1,0:CLS:SCREEN 1,1:CLS
  2479. 29220 *FACE_DEMO_0
  2480. 29230 VIL_MG_PN%=VIL_MG_MGD%(VIL_MG_MGI&(1)+1)
  2481. 29240 GOSUB *VIL_MG_SETP
  2482. 29260 'VIL_MG_PN%=1:GOSUB *VIL_MG_SETP
  2483. 29270 VIL_MG_GN%=1:VIL_MG_X%=400:VIL_MG_Y%=200:GOSUB *VIL_MG_PUTG
  2484. 29280 VIL_MG_GN%=4:VIL_MG_X%=447:VIL_MG_Y%=270:GOSUB *VIL_MG_PUTG:                 WAIT 20
  2485. 29290 T1=0
  2486. 29300 RESTORE *APPLY_MAKU_DATA
  2487. 29310 FOR I=1 TO 17
  2488. 29320   READ VIL_C%,A$,T2,VIL_A$
  2489. 29330   VIL_X%=80:VIL_Y%=450:VIL_L%=64:GOSUB *VIL_INP_GPRINT
  2490. 29340   IF A$="A"                                                                      THEN VIL_MG_GN%=5:VIL_MG_X%=428:VIL_MG_Y%=242:GOSUB *VIL_MG_PUTG
  2491. 29350   IF A$="B"                                                                      THEN VIL_MG_GN%=6:VIL_MG_X%=428:VIL_MG_Y%=242:GOSUB *VIL_MG_PUTG
  2492. 29360   IF A$="C" THEN
  2493. 29370     VIL_MG_GN%=4:VIL_MG_X%=447:VIL_MG_Y%=270:GOSUB *VIL_MG_PUTG
  2494. 29380     VIL_MG_GN%=6:VIL_MG_X%=428:VIL_MG_Y%=242:GOSUB *VIL_MG_PUTG
  2495. 29390     WAIT 150
  2496. 29400     VIL_MG_GN%=1:VIL_MG_X%=400:VIL_MG_Y%=200:GOSUB *VIL_MG_PUTG
  2497. 29410   ENDIF
  2498. 29420   IF A$="D" THEN
  2499. 29430   WAIT 300
  2500. 29440     VIL_MG_GN%=1:VIL_MG_X%=400:VIL_MG_Y%=200:GOSUB *VIL_MG_PUTG
  2501. 29450   ENDIF
  2502. 29460 '  T2=RND*6
  2503. 29470   J=0:WHILE J<T2
  2504. 29480     VIL_MG_GN%=3:VIL_MG_X%=447:VIL_MG_Y%=270:GOSUB *VIL_MG_PUTG:                 WAIT 5+RND*10
  2505. 29490     VIL_MG_GN%=2:VIL_MG_X%=447:VIL_MG_Y%=270:GOSUB *VIL_MG_PUTG:                 WAIT 5+RND*10
  2506. 29500     VIL_MG_GN%=3:VIL_MG_X%=447:VIL_MG_Y%=270:GOSUB *VIL_MG_PUTG:                 WAIT 5+RND*10
  2507. 29510     IF RND>.3! THEN                                                               VIL_MG_GN%=4:VIL_MG_X%=447:VIL_MG_Y%=270:GOSUB *VIL_MG_PUTG:                 WAIT 10+RND*20
  2508. 29520     T1=T1+1
  2509. 29530     IF T1>10+RND*5 THEN
  2510. 29540     VIL_MG_GN%=6:VIL_MG_X%=428:VIL_MG_Y%=242:GOSUB *VIL_MG_PUTG:WAIT 5
  2511. 29550     VIL_MG_GN%=7:VIL_MG_X%=428:VIL_MG_Y%=242:GOSUB *VIL_MG_PUTG:WAIT 5
  2512. 29560     VIL_MG_GN%=8:VIL_MG_X%=428:VIL_MG_Y%=242:GOSUB *VIL_MG_PUTG:WAIT 5
  2513. 29570     VIL_MG_GN%=7:VIL_MG_X%=428:VIL_MG_Y%=242:GOSUB *VIL_MG_PUTG:WAIT 5
  2514. 29580     VIL_MG_GN%=6:VIL_MG_X%=428:VIL_MG_Y%=242:GOSUB *VIL_MG_PUTG:WAIT 5
  2515. 29590     VIL_MG_GN%=5:VIL_MG_X%=428:VIL_MG_Y%=242:GOSUB *VIL_MG_PUTG:WAIT 5
  2516. 29600     T1=0
  2517. 29610     ENDIF
  2518. 29620   J=J+1:WEND
  2519. 29630 NEXT
  2520. 29640 CLS:PALETTE@:GOSUB *VIL_VWM_PALSET
  2521. 29650 RETURN
  2522. 29660 *APPLY_MAKU_DATA
  2523. 29670 DATA  2,A,8,"こんにちは。特別出演(?)のまくらちゃんです   "
  2524. 29680 DATA  2,A,7,"VILの開発にはタッチしていないのですが、    "
  2525. 29690 DATA  2,A,6,"なぜか説明役に駆り出されてしまいました。     "
  2526. 29700 DATA  2,A,4,"……それはともかく、                              "
  2527. 29710 DATA  2,A,9,"ここではウィンドウマネージャとマルチグラフィックの"
  2528. 29720 DATA  2,A,5,"連携例などを説明します。                          "   
  2529. 29730 DATA  2,C,0,"……え?                     "
  2530. 29740 DATA  2,A,6,"ごめんなさい、まだできてないみたいです。          "
  2531. 29750 DATA  9,D,0,"[風ガ]し、締切が……ひぃいいい                  "
  2532. 29760 DATA  2,A,8,"本当はウィンドウにアイコンを張りつける例とか、  "
  2533. 29770 DATA  2,A,7,"背景に顔グラフィックがオーバラップする例とか、  "
  2534. 29780 DATA  2,A,6,"いろいろ予定していたようなんですが……      "
  2535. 29790 DATA  2,A,4,"ちなみにこの口パクアニメは、           "
  2536. 29800 DATA  2,A,7,"マルチグラフィックパッケージで実現しています。  "
  2537. 29810 DATA  2,A,3,"これも時間があれば、                              "
  2538. 29820 DATA  2,A,6,"もっといろんな演出をお見せできたのですが。    "
  2539. 29830 DATA 10,D,0,"(……表情が変わらないよぉ、しくしく(;_;))       "
  2540.